使用不同的图标来适配不同的安卓SDK版本

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)模拟器仍显示浅色版本。

有什么想法吗?

2个回答

19

您可以根据平台版本选择主题,如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文件的片段。

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

底部的三个元素都是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" />

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。恐怕您需要单独的文件夹。

希望这可以帮到您。


这正是我所需要的。我在我的应用程序中使用了明暗图标集。由于2.3及以下版本使用白色菜单,而3.0及以上版本使用黑色菜单作为标准主题,因此我不能只使用一个图标集。谢谢! - kenyu73
1
这应该是答案。运行良好。 - M Jesse

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接