¿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?

Author: ZhiXingZhe - WangYuQi, 2011-09-21

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.

 46
Author: Michael,
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.

 43
Author: Peter Knego,
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)

 16
Author: sziraqui,
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

 13
Author: dawn,
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>

Atributos de estilo de referencia

 4
Author: Michele,
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