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?
Esto es para referir atributos de estilo. ver R.attr
?[<package_name>:][<resource_type>/]<resource_name>
La sintaxis ?attr:
se usa para acceder a los atributos del tema actual. Consulte los atributos de estilo de referencia .
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)