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

Используйте разные значки с различными версиями Android SDK

У меня есть значки для моего Android-меню. На Android 3+ я использую черный ActionBar, поэтому значки белые. Однако на Android 2.x меню по своей сути является белым, что означает, что значки почти невидимы. Как я могу использовать разные значки меню для разных версий? Я предполагаю, что могу это сделать, используя разные доступные каталоги, такие как res/drawable-mdpi-v11, но мне интересно, есть ли другой способ, поэтому мне не нужно создавать кучу разных каталогов, поскольку я добавляю версии или пиксели плотности.

EDIT: я добавляю темные версии в res/drawable-mdpi и res/drawable-hdpi для использования с Android 2.x, и я добавляю световые версии в res/drawable-mdpi-v11 и res/drawable-hdpi-v11 для используйте с Android 3.x и выше, но мой эмулятор Android 2.1 (sdk 7) по-прежнему показывает световую версию.

Любая идея, почему?

4b9b3361

Ответ 1

Вы можете выбрать тему, основанную на версии платформы, как описано в . Определите стиль в ваших res/values ​​/styles.xml следующим образом:

<style name="ThemeSelector" parent="android:Theme.Light">
    ...
</style>

Затем в папке res/values-v11/выберите свою тему (возможно, Holo, если вы темнее)

<style name="ThemeSelector" parent="android:Theme.Holo">
    ...
</style>

Затем добавьте значки в этот стиль. Например, здесь фрагмент файла styles.xml из примера HoneycombGallery.

<style name="AppTheme.Dark" parent="@android:style/Theme.Holo">
    ...
    <item name="menuIconCamera">@drawable/ic_menu_camera_holo_dark</item>
    <item name="menuIconToggle">@drawable/ic_menu_toggle_holo_dark</item>
    <item name="menuIconShare">@drawable/ic_menu_share_holo_dark</item>
</style>

Нижними 3 элементами являются все значки в списках каталогов. Вам по-прежнему потребуется по крайней мере одна папка для каждого значка, соответствующего конкретному разрешению, но вы можете комбинировать яркие и темные значки в одной папке, но вам не нужно иметь разные папки значков для каждой версии платформы. Кроме того, вам нужно будет указать их как ссылки в файле values ​​/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>

В этот момент вы сможете обращаться к ним в своем XML-макете с помощью разыменования "? attr/NameOfYourDrawable", например:

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

Ответ 2

Найдено на сайте разработчика Android: http://developer.android.com/guide/practices/ui_guidelines/icon_design_menu.html

Предупреждение. Поскольку эти ресурсы могут меняться между версиями платформы, вы не должны ссылаться на эти значки, используя идентификаторы ресурсов платформы Android (например, значки меню под android.R.drawable). Если вы хотите использовать любые значки или другие внутренние доступные ресурсы, вы должны сохранить локальную копию этих значков или чертежей в своих ресурсах приложений, а затем указать местную копию из вашего кода приложения. Таким образом, вы можете контролировать внешний вид ваших значков, даже если изменяется системная копия. Обратите внимание, что сетка ниже не предназначена для завершения.

/res/drawable-hdpi (для Android 2.2 и ниже)

/res/drawable-hdpi-v # (для Android 2.3 и выше)

Вы также пробовали тестировать это на телефоне 2.1+, а не на эмуляторе? Если у вас нет телефона, попробуйте создать другой AVD? Я боюсь, что вам понадобятся отдельные папки.

Надеюсь, это поможет.