在不同的Android SDK版本中使用不同的图标

在不同的Android SDK版本中使用不同的图标,android,android-menu,android-actionbar,Android,Android Menu,Android Actionbar,我有我的Android菜单图标。在Android 3+上,我使用的是黑色的操作栏,所以图标是白色的。然而,在安卓2.x上,菜单本身是白色的,这意味着图标几乎看不见。如何为不同版本使用不同的菜单图标?我假设我可以使用不同的可绘制目录,比如res/drawable-mdpi-v11,但我想知道是否还有其他方法,这样我就不必在添加版本或像素密度时创建一堆不同的目录 编辑:我在res/drawable-mdpi和res/drawable-hdpi中加入了深色版本,用于Android 2.x,在res/d

我有我的Android菜单图标。在Android 3+上,我使用的是黑色的操作栏,所以图标是白色的。然而,在安卓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模拟器仍然显示了浅色版本


知道原因吗?

可在android开发网站上找到:

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

/Android 2.2及以下版本的分辨率/可绘制hdpi

/适用于Android 2.3及以上版本的res/drawable-hdpi-v

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


希望这会有所帮助。

您可以根据平台版本选择主题,如《开发指南》中所述。在res/values/styles.xml中定义样式,如下所示:

<style name="ThemeSelector" parent="android:Theme.Light">
    ...
</style>
<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>
<item android:id="@+id/menu_camera"
      android:title="@string/camera"
      android:icon="?attr/menuIconCamera"
      android:showAsAction="ifRoom" />
然后在res/values-v11/文件夹中,如果你是黑暗的,选择你的主题可能是全息

<style name="ThemeSelector" parent="android:Theme.Holo">
    ...
</style>
然后将图标添加到该样式中。例如,下面是示例应用程序中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文件中将它们列为引用,如下所示:

<style name="ThemeSelector" parent="android:Theme.Light">
    ...
</style>
<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>
<item android:id="@+id/menu_camera"
      android:title="@string/camera"
      android:icon="?attr/menuIconCamera"
      android:showAsAction="ifRoom" />
此时,您可以使用?attr/NameOfYourDrawable解引用在布局XML中引用它们,如下所示:

<style name="ThemeSelector" parent="android:Theme.Light">
    ...
</style>
<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>
<item android:id="@+id/menu_camera"
      android:title="@string/camera"
      android:icon="?attr/menuIconCamera"
      android:showAsAction="ifRoom" />

这正是我所需要的。我在我的应用程序中与光明和黑暗的图标集战斗。由于2.3及以下版本使用白色菜单,3.0及以上版本使用黑色菜单作为标准主题,我不能只使用一个图标集。谢谢这应该是答案。效果很好