Oui. Petit guide:
1. Créez un attribut XML
Créez un nouveau fichier XML à l'intérieur /res/values/attrs.xml
, avec l'attribut et son type
<?xml version="1.0" encoding="UTF-8"?>
<resources>
<declare-styleable name="MyCustomElement">
<attr name="distanceExample" format="dimension"/>
</declare-styleable>
</resources>
Fondamentalement, vous devez en configurer un <declare-styleable />
pour votre vue qui contient tous vos attributs personnalisés (ici un seul). Je n'ai jamais trouvé une liste complète des types possibles, vous devez donc en rechercher un, je suppose. Les types que je connais sont la référence (à une autre ressource), la couleur, le booléen, la dimension, le flottant, l'entier et la chaîne . Ils sont assez explicites
2. Utilisez les attributs de votre mise en page
Cela fonctionne de la même manière que vous l'avez fait ci-dessus, à une exception près. Votre attribut personnalisé a besoin de son propre espace de noms 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"
/>
Assez simple.
3. Utilisez les valeurs que vous avez transmises
Modifiez le constructeur de votre vue personnalisée pour analyser les valeurs.
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
est une variable de membre privé dans cet exemple. TypedArray
j'ai beaucoup d'autres choses pour analyser d'autres types de valeurs.
Et c'est tout. Utilisez la valeur analysée dans votre View
pour le modifier, par exemple, utilisez-la onDraw()
pour modifier l'apparence en conséquence.