Point d'interrogation (?) Dans les attributs XML pour Android

140

Quelqu'un peut-il expliquer la signification du point d'interrogation dans les attributs XML Android?

<TextView    
    style="?android:attr/windowTitleStyle"
    More attributes
/>
Casebash
la source

Réponses:

132

Le point d'interrogation signifie qu'il s'agit d'une référence à une valeur de ressource dans le thème actuellement appliqué. Pour en savoir plus, consultez le guide de développement Android de linuxtopia ou le guide de développement android.com .

\? échappe au point d'interrogation.

jball
la source
3
Je pense qu'il serait préférable de pointer votre deuxième lien vers: developer.android.com/guide/topics/resources/…
Casebash
9
Les articles du Guide des développeurs ont été restructurés,
voici
3
Je pense qu'il est plus approprié de dire? est utilisé pour «référencer les attributs de style» plutôt que «faire référence à une valeur de ressource dans le thème actuellement appliqué». Selon le lien du guide de développement android.com que vous avez fourni.
Helin Wang
5
Je pense que cela a le plus de sens lorsque l'on considère plusieurs thèmes contenant le même attribut de ressource personnalisé. Supposons que vous ayez des thèmes liés aux films tels que MyThemeTransformers et MyThemeHobbit, et que les deux aient un attribut appelé movieIcon. Et movieIcon pointe vers une ressource @drawable, par exemple un robot ou une image de hobbit, dans chaque définition de thème. Vous pouvez faire référence à "? Attr / movieIcon" partout où le thème est en vigueur (comme dans une barre d'outils ou une boîte de dialogue ou n'importe quel type de disposition de vue), et il pointera automatiquement vers le dessinable correct lorsque vous basculerez entre les thèmes. J'espère que cela aide.
Devon Biere le
1
@DevonBiere ça a aidé! Ce serait formidable si vous soumettez votre commentaire comme réponse.
Alexander Suraphel
37

Le ? vous permet de faire référence à un attribut de style au lieu d'un ressource codée en dur . Voir «Référencement des attributs de style» dans le Guide de développement Android pour plus de détails.

Alors, comment est-ce vraiment utile? Cela a le plus de sens quand on considère plusieurs thèmes contenant le même attribut de ressource personnalisé .

Supposons que vous ayez des thèmes liés aux films tels que MyThemeTransformers et MyThemeHobbit, et que les deux aient un attribut appelé movieIcon . Et cet attribut movieIcon pointe vers une ressource @drawable différente, par exemple robot.png ou hobbit.png, dans chaque définition de thème.

Vous pouvez faire référence à " ? Attr / movieIcon " partout où le thème est en vigueur (comme dans une barre d'outils ou une boîte de dialogue ou n'importe quel type de disposition de vue), et il pointera automatiquement vers le dessinable correct lorsque vous basculerez entre les thèmes. Vous n'avez besoin d'aucune logique dépendante du thème pour utiliser les différents drawables. Vous définissez simplement l'attribut movieIcon pour chaque thème et le framework Android s'occupe du reste.

Devon Biere
la source