Tak. Krótki przewodnik:
1. Utwórz atrybut XML
Utwórz w środku nowy plik XML /res/values/attrs.xml
z atrybutem i jego typem
<?xml version="1.0" encoding="UTF-8"?>
<resources>
<declare-styleable name="MyCustomElement">
<attr name="distanceExample" format="dimension"/>
</declare-styleable>
</resources>
Zasadniczo musisz skonfigurować jeden <declare-styleable />
dla swojego widoku, który zawiera wszystkie atrybuty niestandardowe (tutaj tylko jeden). Nigdy nie znalazłem pełnej listy możliwych typów, więc myślę, że musisz poszukać źródła. Typy, które znam, to odwołania (do innego zasobu), kolor, wartość logiczna, wymiar, liczba zmiennoprzecinkowa, liczba całkowita i łańcuch . Są dość oczywiste
2. Użyj atrybutów w swoim układzie
Działa to tak samo, jak powyżej, z jednym wyjątkiem. Twój atrybut niestandardowy wymaga własnej przestrzeni nazw XML.
<com.example.yourpackage.MyCustomElement
xmlns:customNS="http://schemas.android.com/apk/res/com.example.yourpackage"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Element..."
customNS:distanceExample="12dp"
/>
Całkiem proste.
3. Skorzystaj z przekazanych wartości
Zmodyfikuj konstruktora widoku niestandardowego, aby przeanalizować wartości.
public MyCustomElement(Context context, AttributeSet attrs) {
super(context, attrs);
TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.MyCustomElement, 0, 0);
try {
distanceExample = ta.getDimension(R.styleable.MyCustomElement_distanceExample, 100.0f);
} finally {
ta.recycle();
}
// ...
}
distanceExample
w tym przykładzie jest prywatną zmienną składową. TypedArray
ma wiele innych rzeczy do analizowania innych typów wartości.
I to wszystko. Użyj przeanalizowanej wartości w swoim, View
aby ją zmodyfikować, np. Użyj jej, onDraw()
aby odpowiednio zmienić wygląd.