Comment faire pour récupérer des attributs XML pour le contrôle personnalisé
J'ai créé une zone de liste modifiable avec un edittext et spinner.
Je suis en train de laisser la android:invite attribut être répercuté sur le
spinner, ce qui signifie que j'ai besoin de l'attraper dans le constructeur qui
passe mon la AttributeSet et le mettre sur la touche de navigation.
Je ne peux pas comprendre comment obtenir la valeur de l'invite.
Je vais essayer,
int[] ra = { android.R.attr.prompt };
TypedArray ta = context.getTheme().obtainStyledAttributes(ra);
int id = ta.getResourceId(0, 0);
Je serai de retour à 0, ce qui signifie qu'il n'a pas trouver l'attribut.
J'ai aussi fait un ta.count() qui retourne 0. Donc je ne suis pas d'obtenir quelque chose en retour.
Mon XML définit simplement une android:valeur d'invite.
Grâce
OriginalL'auteur David | 2010-03-17
Vous devez vous connecter pour publier un commentaire.
J'ai juste écrit une réponse expliquant tout le processus pour utilisation de XML avec les éléments d'INTERFACE utilisateur personnalisés. Dans votre cas, il n'est pas nécessaire de déclarer un styleable, que vous n'avez pas besoin d'attributs personnalisés. À l'aide de
android.R.attr.prompt
que l'int id fonctionnera très bien.R.styleable.className_attributeName
ne fonctionnera que si vous avez défini vos attributs dans le styleable et que vous avez récupéré en passantR.styleable.className
enobtainStyledAttributes
.OriginalL'auteur Casebash
Définir un style dans le fichier xml. Par ex :
<declare-styleable name="ComboBox">
<attr name="prompt" format="reference"/>
</declare-styleable>
Pour obtenir la valeur dans le constructeur d'utilisation :
TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.ComboBox);
Utiliser le TypedArray obtenir des méthodes pour obtenir l'attribut particulier.
Un grand merci! un.getString(R. styleable.option_name) ne fonctionne pas. Je reçois un index out of bounds exception. Je présume que l'indice est censé être l'indice dans le tableau, pas un id de ressource. En utilisant android:invite également les œuvres, android.R.attr.invite. Mon problème est l'utilisation de la mauvaise signature sur le obtainStyleAttributes méthode. J'ai pensé que je devais utiliser un Thème. Ces signatures de travail: TypedArray a = contexte.obtainStyledAttributes(attrs, new int[] { android.R.attr.invite }); ou le contexte.obtainStyledAttributes(attrs, new int[] { android.R.attr.invite}, 0, 0 ); Puis un.getResourceId(0, 0);
OriginalL'auteur Karan