Signo de interrogación (?) En atributos XML para Android

140

¿Alguien puede explicar el signo de interrogación que significa en los atributos XML de Android?

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

Respuestas:

132

El signo de interrogación significa que es una referencia a un valor de recurso en el tema aplicado actualmente. Consulte la Guía de desarrollo de Android linuxtopia o la Guía de desarrollo de android.com para obtener más información al respecto.

\? escapa al signo de interrogación.

jball
fuente
3
Creo que sería mejor señalar su segundo enlace a: developer.android.com/guide/topics/resources/…
Casebash
9
Los artículos de la Guía de desarrollo se han reestructurado, este es el nuevo enlace directo: developer.android.com/guide/topics/resources/…
mernen
3
Creo que es más apropiado decir? se utiliza para "Hacer referencia a atributos de estilo" en lugar de "referencia a un valor de recurso en el tema aplicado actualmente". De acuerdo con el enlace de la guía de desarrollo de android.com que proporcionó.
Helin Wang
55
Creo que tiene más sentido cuando se consideran múltiples temas que contienen el mismo atributo de recurso personalizado. Supongamos que tiene temas relacionados con películas como MyThemeTransformers y MyThemeHobbit, y ambos tienen un atributo llamado movieIcon. Y movieIcon apunta a un recurso @drawable, digamos un robot o una imagen de hobbit, en cada definición de tema. Puede hacer referencia a "? Attr / movieIcon" en cualquier lugar donde el tema esté vigente (como en una barra de herramientas o diálogo o cualquier tipo de diseño de Vista), y automáticamente señalará el dibujo correcto cuando cambie de tema. Espero que eso ayude.
Devon Biere
1
@DevonBiere ayudó! Sería genial si envía su comentario como respuesta.
Alexander Suraphel
37

Los ? le permite referirse a un atributo de estilo en lugar de un recurso específico codificado . Consulte "Atributos de estilo de referencia" en la Guía de desarrollo de Android para más detalles.

Entonces, ¿cómo es esto realmente útil? Tiene más sentido cuando se consideran múltiples temas que contienen el mismo atributo de recurso personalizado .

Supongamos que tiene temas relacionados con películas como MyThemeTransformers y MyThemeHobbit, y ambos tienen un atributo llamado movieIcon . Y ese atributo movieIcon apunta a un recurso @drawable diferente, digamos robot.png o hobbit.png, en cada definición de tema.

Puede hacer referencia a " ? Attr / movieIcon " en cualquier lugar donde el tema esté vigente (como en una barra de herramientas o diálogo o cualquier tipo de diseño de Vista), y automáticamente señalará el dibujo correcto cuando cambie de tema. No necesita ninguna lógica dependiente del tema para usar los diferentes elementos dibujables. Simplemente defina el atributo movieIcon para cada tema y el marco de Android se encarga del resto.

Devon Biere
fuente