2

我意识到Android的Option菜单上至少有两种背景颜色。在 HTC Hero 上,背景为白色,而在三星 Galaxy S II 上,背景为黑色。

当我为背景菜单设置图标时,这成为了一个问题。有什么方法可以检测 Android 中选项菜单的背景颜色吗?

4

4 回答 4

3

可能的解决方案:

对于 Android 4.0+,您还可以设置浅色/深色 Holo 主题,保证(至少在理论上)在不同手机制造商之间保持不变 - 因此在 HTC Sense、三星 TouchWiz 等中看起来相同。

于 2011-11-28T18:42:11.590 回答
2

这确实是一个非常烦人的问题。

在我的实现中,我总是尝试使用来自 android.R.drawable.IC_menu_ *的标准图标,所以我确信这些图标是框架的一部分,用户在我的应用程序中看到他们的通用图标总是非常惊讶!

这为设备上的用户体验提供了非常好的连续性,但这并不能回答您的问题,但至少提供了一种解决方法。

例如,这里是所有 android 2.2 图标:http ://androiddrawableexplorer.appspot.com/ 你可以相信我,使用这些图标总是适合你的颜色。

于 2011-11-28T17:48:22.463 回答
1

首先回答你的标题问题:

您可以通过阅读当前主题的属性来参考和阅读选项菜单的背景。这个属性是panelFullBackground. 例如,将其设置为 XML 中 textview 的背景¹:

<TextView android:background="?android:attr/panelFullBackground" 
          ... />

请注意,背景似乎是纯色,但实际上不是——它实际上是位图。如果您仔细观察,您会看到顶部有灰色边框(android 2.3+)或阴影(<= android 2.2),所以有点困难。幸运的是,有一个不同的属性panelColorBackground,它与可绘制对象的背景颜色尽可能接近。因此,如果您只想要正常的背景颜色,请改用它。

¹这当然也可以从代码中读取,但我现在不知道如何从我的头顶开始,也许我会在稍后查找并编辑它。

关于图标

所以你有上面所说的颜色,但你仍然需要处理它才能知道它是暗色还是亮色。您可以这样做,但这不是处理这些图标的常用方法,在您涵盖所有可能的情况之前,这可能需要大量工作 - 更不用说您必须为每个变体创建图标。

通常您应该采用平台菜单图标样式。这适用于所有设备,并且您的用户看起来很熟悉(不遵循此的自定义图标通常看起来“错误” - 例如,我相信 astro 文件管理器会这样做)。您可以手动完成(请参阅指南,但更好的替代方法是 Android Asset Studio。它有两种口味:

  • 作为一个网络应用程序
  • 集成在最新版eclipse的ADT插件中
    (下File->New->Other->Android Icon Set

两者的工作流程非常相似,选择点“菜单图标”并按照向导进行操作。它会提示您输入所需图标的简单黑白位图,该位图仅勾勒出其形状。在您指定一个之后,资产工作室将为您生成所有内容。使用“clipart”选项玩一下,它有一些示例位图准备好看看它是如何工作的。完成后,webapp 会为您提供一个简单的 zip,可以将其解压缩到您的项目目录中,eclipse 版本将其直接添加到您在向导中选择的项目中。

于 2011-11-28T20:18:28.547 回答
-1

背景颜色可以是任何东西,因为它是由制造商在框架中实现的。你不能读它,事实上你永远不需要读它。

只需在 res/menu 文件夹中创建自定义菜单布局,设置样式并使用它。

于 2011-11-28T17:46:37.733 回答