theme textappearance style studio estilos developer create change apptheme app android android-layout attributes android-theme

android - textappearance - ¿Alguien puede explicar el attr?



textappearance android (5)

El valor ?attr/menuIconCamera significa que se ?attr/menuIconCamera un icono del atributo menuIconCamera del tema actual.

Debe haber un menuIconCamera atributo menuIconCamera en algún lugar del archivo themes.xml . Si hay dos temas con diferentes valores de este atributo, el ícono real dependerá del tema que se use actualmente.

El archivo attrs.xml se usa para definir atributos personalizados. Sin esta definición, el compilador tratará los atributos desconocidos como erróneos.

Estoy mirando el código de muestra de Honeycomb Gallery ( here ) y me encontré con el siguiente código al intentar agregar elementos de acción en mi propia aplicación:

<item android:id="@+id/camera" android:title="Camera" android:icon="?attr/menuIconCamera" android:showAsAction="ifRoom" />

The ?attr me está tirando por un bucle. ¿Puede alguien explicar por favor qué está haciendo esto? ¿Cómo se relaciona esto con un dibujable? Parece que no puedo encontrar buena información en Google. ¿También hay una lista o galería de atributos que podemos usar para íconos en lugar de simplemente menuIconCamera ?

Gracias

Editar: Hice un poco más de búsqueda y descubrí que attrs.xml tiene este aspecto:

<resources> <declare-styleable name="AppTheme"> <attr name="listDragShadowBackground" format="reference" /> <attr name="menuIconCamera" format="reference" /> <attr name="menuIconToggle" format="reference" /> <attr name="menuIconShare" format="reference" /> </declare-styleable>

Lamentablemente, eso lo hace aún más confuso para mí. ¿Qué está haciendo esto?




Mi inglés no es bueno, lo siento. Pero sé esta pregunta

android:icon="?attr/menuIconCamera" quiere usar

attrs.xml

<resources> <declare-styleable name="AppTheme"> <attr name="listDragShadowBackground" format="reference" /> <attr name="menuIconCamera" format="reference" /> <attr name="menuIconToggle" format="reference" /> <attr name="menuIconShare" format="reference" /> </declare-styleable> </resources>

styles.xml

<style name="AppTheme.Light" parent="@android:style/Theme.Holo.Light"> <item name="android:actionBarStyle">@style/ActionBar.Light</item> <item name="android:windowActionBarOverlay">true</item> <item name="listDragShadowBackground">@android:color/background_light</item> <item name="menuIconCamera">@drawable/ic_menu_camera_holo_light</item> //this.... <item name="menuIconToggle">@drawable/ic_menu_toggle_holo_light</item> <item name="menuIconShare">@drawable/ic_menu_share_holo_light</item> </style>

usa @drawable/ic_menu_camera_holo_light


Sé que esta publicación es muy antigua, pero creo que la siguiente explicación ayudará a los principiantes a entenderla fácilmente.

Entonces en términos simples,

someAttribute="?attr/attributeName" significa -

establecer el valor de someAttribute a cualquiera que sea el valor de attributeName en el tema actual

Un ejemplo común ocurre al diseñar una barra de herramientas

<style name="AppTheme" parent="@style/Theme.AppCompat.Light.NoActionBar"> <item name="colorPrimary">@color/primary_color</item> //some more stuff here </style> <!-- custom toolbar style --> <style name="myToolbar" parent="Widget.AppCompat.Toolbar"> <item name="android:background">?attr/colorPrimary</item> //some code here </style>

Aquí el valor de android:background se establecerá en @color/primary_color porque ?attr/colorPrimary refiere a @color/primary_color en el tema actual (AppTheme)