Sì. Breve guida:
1. Creare un attributo XML
Crea un nuovo file XML all'interno /res/values/attrs.xml
, con l'attributo e il suo tipo
<?xml version="1.0" encoding="UTF-8"?>
<resources>
<declare-styleable name="MyCustomElement">
<attr name="distanceExample" format="dimension"/>
</declare-styleable>
</resources>
Fondamentalmente devi impostarne uno <declare-styleable />
per la tua vista che contenga tutti i tuoi attributi personalizzati (qui solo uno). Non ho mai trovato un elenco completo dei possibili tipi, quindi è necessario cercare la fonte per uno immagino. I tipi che conosco sono riferimenti (a un'altra risorsa), color, boolean, dimension, float, integer e string . Sono abbastanza autoesplicativi
2. Usa gli attributi nel tuo layout
Funziona allo stesso modo che hai fatto sopra, con un'eccezione. L'attributo personalizzato necessita del proprio spazio dei nomi 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"
/>
Abbastanza diretto.
3. Utilizza i valori che ti vengono trasmessi
Modifica il costruttore della tua visualizzazione personalizzata per analizzare i valori.
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
è una variabile membro privata in questo esempio. TypedArray
ha molte altre cose per analizzare altri tipi di valori.
E questo è tutto. Usa il valore analizzato nel tuo View
per modificarlo, ad esempio usalo onDraw()
per cambiare l'aspetto di conseguenza.