Ja. Kurzanleitung:
1. Erstellen Sie ein Attribut XML
Erstellen Sie eine neue XML-Datei /res/values/attrs.xml
mit dem Attribut und dem Typ
<?xml version="1.0" encoding="UTF-8"?>
<resources>
<declare-styleable name="MyCustomElement">
<attr name="distanceExample" format="dimension"/>
</declare-styleable>
</resources>
Grundsätzlich müssen Sie eine <declare-styleable />
für Ihre Ansicht einrichten , die alle Ihre benutzerdefinierten Attribute enthält (hier nur eine). Ich habe nie eine vollständige Liste möglicher Typen gefunden, daher müssen Sie sich die Quelle für einen ansehen, denke ich. Ich kenne folgende Typen: Referenz (auf eine andere Ressource), Farbe, Boolescher Wert, Dimension, Float, Ganzzahl und Zeichenfolge . Sie sind ziemlich selbsterklärend
2. Verwenden Sie die Attribute in Ihrem Layout
Das funktioniert genauso wie oben, mit einer Ausnahme. Ihr benutzerdefiniertes Attribut benötigt einen eigenen XML-Namespace.
<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"
/>
Ziemlich einfach.
3. Verwenden Sie die Werte, die Sie übergeben bekommen
Ändern Sie den Konstruktor Ihrer benutzerdefinierten Ansicht, um die Werte zu analysieren.
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
ist in diesem Beispiel eine private Mitgliedsvariable. TypedArray
Ich habe viele andere Dinge, um andere Arten von Werten zu analysieren.
Und das ist es. Verwenden Sie den analysierten Wert in Ihrem View
, um ihn zu ändern, z. B. verwenden Sie ihn onDraw()
, um das Aussehen entsprechend zu ändern.