13

我的 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) 模拟器仍显示轻量版。

知道为什么吗?

4

2 回答 2

19

您可以选择基于平台版本的主题,如样式和主题开发指南中所述。在 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 文件的一个片段。

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

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

<item android:id="@+id/menu_camera"
      android:title="@string/camera"
      android:icon="?attr/menuIconCamera"
      android:showAsAction="ifRoom" />
于 2012-03-06T21:59:43.873 回答
6

在 android 开发网站上找到:http: //developer.android.com/guide/practices/ui_guidelines/icon_design_menu.html

警告:因为这些资源可以在平台版本之间改变,你不应该使用 Android 平台资源 ID 引用这些图标(即 android.R.drawable 下的菜单图标)。如果您想使用任何图标或其他内部可绘制资源,您应该在应用程序资源中存储这些图标或可绘制资源的本地副本,然后从应用程序代码中引用本地副本。这样,即使系统的副本发生更改,您也可以保持对图标外观的控制。请注意,下面的网格并不完整。

/res/drawable-hdpi(适用于 Android 2.2 及更低版本)

/res/drawable-hdpi-v#(适用于 Android 2.3 及更高版本)

您是否也尝试过在 2.1+ 手机而不是模拟器上进行测试?如果您没有手机,请尝试创建另一个 AVD?恐怕您将需要单独的文件夹。

希望这会有所帮助。

于 2012-03-06T21:57:53.193 回答