使用具有不同Android SDK版本的不同图标

Ken*_*and 13 android android-menu android-actionbar

我的Android菜单有图标.在Android 3+上我使用的是黑色ActionBar,因此图标为白色.但是,在Android 2.x上,菜单本身就是白色,这意味着图标几乎不可见.如何为不同版本使用不同的菜单图标?我假设我可以用不同的绘制目录,如RES /提拉 - MDPI-V11做到这一点,但我不知道是否有另一种方式,所以我不必创建一堆不同的目录,因为我添加版本或像素密度.

编辑:我把在res /绘制-MDPI和RES /提拉 - 华电国际对采用Android 2.X使用深色版本,我把在res光版本/提拉 - MDPI-V11和RES /提拉 - HDPI-V11配合Android应用3.x和更高,但我的Android 2.1(sdk 7)模拟器仍然显示轻量版本.

知道为什么吗?

Ale*_*cas 19

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

<style name="ThemeSelector" parent="android:Theme.Light">
    ...
</style>
Run Code Online (Sandbox Code Playgroud)

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

<style name="ThemeSelector" parent="android:Theme.Holo">
    ...
</style>
Run Code Online (Sandbox Code Playgroud)

然后为该样式添加图标.例如,这是来自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>
Run Code Online (Sandbox Code Playgroud)

底部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>
Run Code Online (Sandbox Code Playgroud)

此时,您可以使用"?attr/NameOfYourDrawable"取消引用在布局XML中引用它们,如下所示:

<item android:id="@+id/menu_camera"
      android:title="@string/camera"
      android:icon="?attr/menuIconCamera"
      android:showAsAction="ifRoom" />
Run Code Online (Sandbox Code Playgroud)


Jon*_*las 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?我担心你需要单独的文件夹.

希望这会有所帮助.