¿Alguien puede explicar el attr?
Estoy mirando el código de muestra de la Galería Honeycomb ( aquí ) y me encontré con el siguiente código mientras intentaba 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" />
El ?attr
me está lanzando para un bucle. ¿Puede alguien por favor explicar lo que esto está haciendo? ¿Cómo se relaciona esto con un elemento de diseño? No puedo encontrar ninguna buena información en Google. También hay una lista o galería de atributos que podemos usar para iconos en lugar de solo menuIconCamera
?
Gracias
Editar: Hice un poco más mirando a su alrededor y encontró que attrs.xml se ve así:
<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>
Desafortunadamente eso lo hace aún más confuso para mí. ¿Qué está haciendo esto?
5 answers
El valor ?attr/menuIconCamera
significa que se utilizará un icono del atributo menuIconCamera
del tema actual.
Debe haber un elemento de diseño asignado al atributo menuIconCamera
en algún lugar del archivo themes.xml
. Si hay dos temas con diferentes valores de este atributo, el icono real dependerá del tema que se utilice actualmente.
El archivo attrs.xml
se utiliza para definir atributos personalizados. Sin esta definición, el compilador tratará los atributos desconocidos como erróneos.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-09-21 18:47:54
La sintaxis ?attr:
se utiliza para acceder a los atributos del tema actual. Ver hacer referencia a atributos de estilo.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-08-02 09:15:49
Sé que este post es muy antiguo, pero siento que la siguiente explicación ayudará a los principiantes a entenderlo fácilmente.
Así que en términos sencillos,
someAttribute="?attr/attributeName"
medios -
Establece el valor de someAttribute a lo que sea el valor de attributeName en el tema actual
Un ejemplo común ocurre en el estilo de 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á a @color/primary_color
porque ?attr/colorPrimary
se refiere a @color/primary_color
en el tema actual (AppTheme)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-11-28 14:19:58
Mi inglés no es bueno, lo siento. Pero conozco esta pregunta
android:icon="?attr/menuIconCamera"
want use
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>
Estilos.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>
Use @drawable/ic_menu_camera_holo_light
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-12-27 09:45:12
Esto es para referir atributos de estilo. véase R. attr
?[<package_name>:][<resource_type>/]<resource_name>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-09-21 18:55:05