我的 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/