Подтвердить что ты не робот

Может кто-нибудь объяснить attr?

Я просматриваю образец кода Honeycomb Gallery (здесь), и я наткнулся на следующий код, пытаясь добавить элементы действия в свои собственные приложение:

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

?attr бросает меня за цикл. Может кто-нибудь объяснить, что это делает? Как это связано с возможностью? Я не могу найти хорошую информацию о Google. Также есть ли список или галерея атрибутов, которые мы можем использовать для значков, а не только menuIconCamera?

Спасибо

Изменить: Я немного поглядел и обнаружил, что 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>

К сожалению, это просто делает меня еще более запутанным для меня. Что это значит?

4b9b3361

Ответ 1

Значение ?attr/menuIconCamera означает, что будет использоваться значок из атрибута menuIconCamera текущей темы.

Для атрибута menuIconCamera где-то в файле themes.xml должен быть присвоен атрибут drawable. Если есть две темы с разными значениями этого атрибута, то фактический значок будет зависеть от темы, которая в настоящее время используется.

Файл attrs.xml используется для определения настраиваемых атрибутов. Без этого определения компилятор будет рассматривать неизвестные атрибуты как ошибочные.

Ответ 3

Мой английский плохой, извините. Но я знаю этот вопрос

android:icon="?attr/menuIconCamera" хотите использовать

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>

использовать @drawable/ic_menu_camera_holo_light

Ответ 4

Я знаю, что этот пост очень старый, но я чувствую, что следующее объяснение поможет начинающим легко понять это.

Итак, в непрофессиональных терминах

someAttribute="?attr/attributeName" означает -

задайте значение someAttribute для значения attributeName в текущей теме

Обычный пример возникает при стилизации панели инструментов

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

Здесь значение android:background будет установлено на @color/primary_color, потому что ?attr/colorPrimary ссылается на @color/primary_color в текущей теме (AppTheme)