android - 不同的 Android SDK 版本使用不同的图标

标签 android android-menu android-actionbar

我的 Android 菜单有图标。在 Android 3+ 上,我使用的是黑色 ActionBar,因此图标为白色。然而,在 Android 2.x 上,菜单本质上是白色的,这意味着图标几乎是不可见的。如何为不同的版本使用不同的菜单图标?我假设我可以使用不同的 drawable 目录(如 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) 模拟器仍显示精简版。

知道为什么吗?

最佳答案

您可以根据平台版本选择主题,如 Styles and Themes 中所述开发指南。像这样在 res/values/styles.xml 中定义样式:

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

然后在 res/values-v11/文件夹中,选择你的主题(可能是 Holo,如果你是黑暗的)

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

然后将图标添加到该样式。例如,这是来自 HoneycombGallery 的 styles.xml 文件的 fragment 。示例应用程序。

<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 个元素都是 drawable 目录中的图标。对于每组特定于分辨率的图标,您仍然需要至少一个文件夹,但您可以将浅色和深色图标组合到同一个文件夹中,但您不必为每个平台版本设置不同的图标文件夹。此外,您需要将它们列为 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>

此时您将能够使用“?attr/NameOfYourDrawable”解引用在您的布局 XML 中引用它们,如下所示:

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

关于android - 不同的 Android SDK 版本使用不同的图标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9591726/

相关文章:

java - 在 Android 中使用原始类的 Intent 后,将 Intent 传回原始类的正确方法是什么?

android - Appium AndroidDriver 的 DesiredCapabilities

android - android中的过滤器位置错误

android - Activity 中的 OnOptionsItemSelected 在 fragment 中的 onOptionsItemSelected 之前被调用。其他方式可能吗?

android - 如何在具有 Android>4.0 和硬件按钮的设备上设置操作溢出菜单中的文本样式?

android - 文本在 Sherlock 的操作栏选项卡中全部大写

java - Android 类我错了

android - 根据所选选项卡显示和隐藏 ActionBar 中的项目

android - 更改工具栏溢出菜单列表的高度

android - 用于滑过操作栏的自定义抽屉布局