我意识到Android的Option菜单上至少有两种背景颜色。在 HTC Hero 上,背景为白色,而在三星 Galaxy S II 上,背景为黑色。
当我为背景菜单设置图标时,这成为了一个问题。有什么方法可以检测 Android 中选项菜单的背景颜色吗?
我意识到Android的Option菜单上至少有两种背景颜色。在 HTC Hero 上,背景为白色,而在三星 Galaxy S II 上,背景为黑色。
当我为背景菜单设置图标时,这成为了一个问题。有什么方法可以检测 Android 中选项菜单的背景颜色吗?
可能的解决方案:
对于 Android 4.0+,您还可以设置浅色/深色 Holo 主题,保证(至少在理论上)在不同手机制造商之间保持不变 - 因此在 HTC Sense、三星 TouchWiz 等中看起来相同。
这确实是一个非常烦人的问题。
在我的实现中,我总是尝试使用来自 android.R.drawable.IC_menu_ *的标准图标,所以我确信这些图标是框架的一部分,用户在我的应用程序中看到他们的通用图标总是非常惊讶!
这为设备上的用户体验提供了非常好的连续性,但这并不能回答您的问题,但至少提供了一种解决方法。
例如,这里是所有 android 2.2 图标:http ://androiddrawableexplorer.appspot.com/ 你可以相信我,使用这些图标总是适合你的颜色。
首先回答你的标题问题:
您可以通过阅读当前主题的属性来参考和阅读选项菜单的背景。这个属性是panelFullBackground
. 例如,将其设置为 XML 中 textview 的背景¹:
<TextView android:background="?android:attr/panelFullBackground"
... />
请注意,背景似乎是纯色,但实际上不是——它实际上是位图。如果您仔细观察,您会看到顶部有灰色边框(android 2.3+)或阴影(<= android 2.2),所以有点困难。幸运的是,有一个不同的属性panelColorBackground
,它与可绘制对象的背景颜色尽可能接近。因此,如果您只想要正常的背景颜色,请改用它。
¹这当然也可以从代码中读取,但我现在不知道如何从我的头顶开始,也许我会在稍后查找并编辑它。
关于图标
所以你有上面所说的颜色,但你仍然需要处理它才能知道它是暗色还是亮色。您可以这样做,但这不是处理这些图标的常用方法,在您涵盖所有可能的情况之前,这可能需要大量工作 - 更不用说您必须为每个变体创建图标。
通常您应该采用平台菜单图标样式。这适用于所有设备,并且您的用户看起来很熟悉(不遵循此的自定义图标通常看起来“错误” - 例如,我相信 astro 文件管理器会这样做)。您可以手动完成(请参阅指南),但更好的替代方法是 Android Asset Studio。它有两种口味:
File->New->Other->Android Icon Set
)两者的工作流程非常相似,选择点“菜单图标”并按照向导进行操作。它会提示您输入所需图标的简单黑白位图,该位图仅勾勒出其形状。在您指定一个之后,资产工作室将为您生成所有内容。使用“clipart”选项玩一下,它有一些示例位图准备好看看它是如何工作的。完成后,webapp 会为您提供一个简单的 zip,可以将其解压缩到您的项目目录中,eclipse 版本将其直接添加到您在向导中选择的项目中。
背景颜色可以是任何东西,因为它是由制造商在框架中实现的。你不能读它,事实上你永远不需要读它。
只需在 res/menu 文件夹中创建自定义菜单布局,设置样式并使用它。