Je sais qu'il est possible de créer un élément d'interface utilisateur personnalisé (via View ou une extension d'élément d'interface utilisateur spécifique). Mais est-il possible de définir de nouvelles propriétés ou attributs pour les éléments d'interface utilisateur nouvellement créés (je veux dire non hérité, mais tout nouveau pour définir un comportement spécifique que je ne suis pas capable de gérer avec des propriétés ou des attributs par défaut)
par exemple. élément mon élément personnalisé:
<com.tryout.myCustomElement
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:text="Element..."
Android:myCustomValue=<someValue>
/>
Donc, est-il possible de définir MyCustomValue?
THX
Oui. Petit guide:
Créez un nouveau fichier XML dans /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 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 la source, je suppose. Les types que je connais sont référence (à une autre ressource), couleur, booléen, dimension, float, entier et chaîne. Ils sont assez explicites
Cela fonctionne de la même manière que 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.
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 membre privée dans cet exemple. TypedArray
a eu beaucoup d'autres choses pour analyser d'autres types de valeurs.
Et c'est tout. Utilisez la valeur analysée dans votre View
pour la modifier, par exemple. utilisez-le dans onDraw()
pour modifier l'apparence en conséquence.
Dans votre dossier res/values, créez attr.xml. Là, vous pouvez définir vos attributs:
<declare-styleable name="">
<attr name="myCustomValue" format="integer/boolean/whatever" />
</declare-styleable>
Lorsque vous voulez ensuite l'utiliser dans votre fichier de mise en page, vous devez ajouter
xmlns:customname="http://schemas.Android.com/apk/res/your.package.name"
et alors vous pouvez utiliser la valeur avec customname:myCustomValue=""