Используйте разные значки с разными версиями Android SDK - PullRequest
13 голосов
/ 07 марта 2012

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

РЕДАКТИРОВАТЬ: я помещаю темные версии в 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) по-прежнему показывает облегченную версию.

Есть идеи, почему?

Ответы [ 2 ]

19 голосов
/ 07 марта 2012

Вы можете выбрать тему в зависимости от версии платформы, как описано в руководстве Styles and Themes dev. Определите стиль в вашем файле 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>

Все три нижних элемента - это иконки в каталогах для рисования. Для каждого набора значков для определенного разрешения вам все равно понадобится как минимум одна папка, но вы можете комбинировать светлые и темные значки в одну и ту же папку, но вам не нужно иметь разные папки значков для каждой версии платформы. Также вам нужно будет перечислить их как ссылки в файле 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" />
6 голосов
/ 07 марта 2012

Найдено на сайте разработчика 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?Боюсь, вам понадобятся отдельные папки.

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

...