Quelqu'un peut-il m'expliquer déclarer-styleable balise XML dans cet exemple et la théorie derrière son usage?
Je suis en train de lire le Début d'Android 4 Développement et dans le chapitre 5, on parle de Galerie et ImageVievs et introduit la déclarer-styleable balise XML sans expliquer son but.. j'ai essayé de trouver quelques infos également sur la référence, sans la chance.. nous avons Par exemple la suivante:
res/values/attrs.xml
<?xml version=”1.0” encoding=”utf-8”?>
<resources>
<declare-styleable name=”Gallery1”>
<attr name=”android:galleryItemBackground” />
</declare-styleable>
</resources>
example.java
public class GalleryActivity extends Activity {
[...]
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Gallery gallery = (Gallery) findViewById(R.id.gallery1);
gallery.setAdapter(new ImageAdapter(this));
[...]
}
[...]
public class ImageAdapter extends BaseAdapter {
[...]
int itemBackground;
public ImageAdapter(Context c) {
context = c;
//---setting the style---
TypedArray a = obtainStyledAttributes(
R.styleable.Gallery1);
itemBackground = a.getResourceId(
R.styleable.Gallery1_android_galleryItemBackground, 0);
a.recycle();
}
public View getView(int position, View convertView, ViewGroup parent) {
ImageView imageView;
[...]
imageView.setBackgroundResource(itemBackground);
return imageView;
}
}
}
J'ai lu le code plusieurs fois et je ne comprends pas vraiment le but de la définition de ce styleable Gallery1 avec un seul attr enfant seul avec un nom attribut.. pouvez-vous m'aider? Est-ce galleryItemBackground quelque chose fournies par le système ou est-il quelque chose de défini par nous? Que faisons-nous dans ce morceau de code?
Je vous remercie d'avance pour toute aide!
OriginalL'auteur Gianni Costanzi | 2012-05-31
Vous devez vous connecter pour publier un commentaire.
Cette balise fait partie d'un ensemble de premade Android attributs définis dans
R. Styleable
, ce qui peut être dit en dehors d'une coutume styleable tag de laandroid:
espace de noms xml préfixe devant le nom de l'attribut.Cet attribut particulier est décrit comme:
Vous avez raison, cependant, que la coutume balises d'attribut nécessite non seulement le nom de l'attribut, mais quel est son type, par exemple l'ajout d'un élément personnalisé à votre
attrs.xml
fichier pourrait ressembler à ceci:Remarque l'absence de la
android:
espace de noms sur le deuxième attribut.Edit:
Découvrez
R. attr
(cliquez pour le lien), pour divers attributs inclus dans Android. Vous n'avez pas besoin de déclarer un type pour eux, parce qu'ils sont tous déjà déclaré. Savoir ce type a été déclarée pour un attribut particulier, de trouver la description de celui qui vous intéresse.galleryItemBackground
est, comme vous pouvez l'imaginer, une référence à une autre ressource, d'autres possibilités sont les booléens, les flotteurs, les couleurs, etc.Autres références: Andtoid utilise le
<declare-styleable>
balise pour créer unAttributeSet
.TypedArray
est utilisé pour analyser leAttributeSet
.Dans l'exemple, il est difficile de voir l'utilité de ce modèle quand il y a un seul attribut. Vous pouvez faire ce que vous demandez, et il peut être plus facile. La construction, cependant, fait partie d'Android le mantra de séparer l'INTERFACE utilisateur de "look" de son "fonctionnellement" en vous permettant de définir certains attributs en xml au lieu d'avoir à tout faire dans le code. Prendre la
View
classe, par exemple. Elle a plus de 30 attributs qui peuvent être définis dans un fichier xml (taille, rembourrage, cliquable, peut recevoir le focus, etc); quelqu'un qui fait une sous-classe personnalisée deView
pouvez définir quelques-uns, tous ou aucun de ces attributs en xml et ils sont gérées automatiquement pour vous lorsque la vue est créée. Il y a des équivalents de code pour définir les attributs si nécessaire, mais imaginez que chaque fois que vous sous-classéView
vous aviez à définir tous les attributs dans le code au lieu d'avoir une option pour mettre en xml.Il serait également être une mince affaire que de faire juste vos propres ressources pour vos cours qui font exactement la même chose, cependant, l'utilisation de l'construits dans les styles fournira les ressources par défaut qui correspondent à l'aspect et la convivialité de l'Android cadre si vous n'avez pas les remplacer.
Espère que cette aide.
Si le but de le code ci-dessus et l'utilisation de la styleable Gallery1 est de simplement obtenir une valeur par défaut Drawable pour le point de vue du fond, je n'ai pas pu définir la variable itemBackground getDrawable(android.R.attr.galleryItemBackground)? Pouvez-vous m'expliquer un peu plus?
Salut, veuillez consulter l'édition de l'original de la réplique. J'espère qu'ils vont résoudre votre problème.
Merci beaucoup pour la réponse... j'ai encore quelques difficultés à comprendre la logique derrière declare-styleable.. qu'est-ce que
<attr name=”android:galleryItemBackground” />
exactement dire à la styleable MyCustomView? Est-ce qu'il dit: vous avez un attribut galleryItemBackground qui a la même valeur que android:galleryItemBackground? Je suis désolé, mais plus je lis, plus il me confond O_oMerci, j'ai bien aimé votre explication. Il est maintenant clair comment il fonctionne.
OriginalL'auteur happydude