我的Android菜单上有图标。在Android 3+上,我使用的是黑色ActionBar,所以图标是白色的。然而,在Android2.x上,菜单本质上是白色的,这意味着图标几乎看不见。如何为不同的版本使用不同的菜单图标?我假设我可以使用不同的可绘制目录,如res/ drawable -mdpi-v11,但我想知道是否有其他方法,这样我就不必在添加版本或像素密度时创建一堆不同的目录。
编辑:我把暗版本放在res/drawable-mdpi和res/drawable-hdpi中,用在Android2.x上;我把轻版放在res/drawable-mdpi-v11和res/drawable-hdpi-v11里,用在Android3.x和更高版本上,但我的Android2.1 (sdk 7)模拟器仍然显示轻版本。
知道为什么吗?
发布于 2012-03-07 05:59:44
您可以根据平台版本选择主题,如Styles and Themes开发指南中所述。在res/values/styles.xml中定义一个样式,如下所示:
<style name="ThemeSelector" parent="android:Theme.Light">
...
</style>然后在res/values-v11/文件夹中,选择你的主题(如果你是黑人,可能是全息图)
<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>此时,您可以在布局XML中使用"?attr/NameOfYourDrawable“取消引用它们,如下所示:
<item android:id="@+id/menu_camera"
android:title="@string/camera"
android:icon="?attr/menuIconCamera"
android:showAsAction="ifRoom" />发布于 2012-03-07 05:57:53
在android dev站点上找到: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?恐怕您需要单独的文件夹。
希望这能有所帮助。
https://stackoverflow.com/questions/9591726
复制相似问题