确保某些属性(例如 android:attr/textAppearanceMedium)在不同版本的 Android 上工作的可移植方式是啥
Posted
技术标签:
【中文标题】确保某些属性(例如 android:attr/textAppearanceMedium)在不同版本的 Android 上工作的可移植方式是啥【英文标题】:What is the portable way to ensure certain attribute (android:attr/textAppearanceMedium for example) works across different version of Android确保某些属性(例如 android:attr/textAppearanceMedium)在不同版本的 Android 上工作的可移植方式是什么 【发布时间】:2013-03-22 22:50:06 【问题描述】:目前,我正在使用主题Theme.Sherlock.Light.DarkActionBar
。
我正在为ListView
中使用的TextView
应用?android:attr/textAppearanceMedium
和?android:attr/textAppearanceSmall
属性
<TextView
...
android:textAppearance="?android:attr/textAppearanceMedium" />
<TextView
...
android:textAppearance="?android:attr/textAppearanceSmall" />
但是,对于果冻豆和姜饼,我得到了两种截然不同的效果。
果冻豆(看起来很棒!)
姜饼(呃……)
有什么便携的方法可以告诉我,在浅色背景上使用textAppearanceMedium
和textAppearanceSmall
属性时,颜色应该是深色的。目前,Gingerbread 的列表视图使用浅色背景。因此,正确的字体颜色应该是深色的,以便文本可见。
【问题讨论】:
两个 TextView 的下拉列表视图是否完全自定义?如果是这样,你为什么不把它的背景颜色改成深色调呢? 是的。背景颜色可以变为深色调,这是解决方案之一。就是这样,我怎样才能保持系统提供的默认背景颜色,而又能够使我的文本颜色可见,而无需任何硬编码(说,修复姜饼的字体颜色必须是深色的)?换句话说,font 属性会实现它当前的背景,并相应地使用正确的颜色。 我了解您的计划。请在下面查看我的扩展答案(评论太长)。 【参考方案1】:我了解到您希望支持相应 Android 版本的原生外观并希望避免覆盖默认颜色。
“香草”姜饼版本可能看起来像您的屏幕截图中的那个,但我也看到了设备制造商(如三星 TouchWiz 或 HTC Sense)的 GUI 改编或覆盖这些颜色值的自定义 ROM。不仅是默认背景颜色,还有文本颜色。
因此,您无法确定所有的 Honeycomb 之前的版本都会在下拉菜单中的白色背景上显示明亮的文本,因此您还必须检查文本颜色并进行相应调整。检查视图的背景或前景资源/颜色可能非常麻烦,但这里有两种方法:https://***.com/a/8089242/1140682 和 https://***.com/a/8848494/1140682
但是,我强烈建议您对文本和背景应用自定义的“固定”颜色。由于 ActionBar 仅与 Honeycomb 一起引入,因此没有 ActionBar
以前版本的指南/样式,您无论如何都可能违反。
一个好的开始是ActionBar Style Generator,它也支持Theme.Sherlock.Light.DarkActionBar
。它会为您生成所有可绘制对象和样式文件,以便您的 ActionBar
和菜单在多个 Android 版本和修改中看起来一致。
【讨论】:
以上是关于确保某些属性(例如 android:attr/textAppearanceMedium)在不同版本的 Android 上工作的可移植方式是啥的主要内容,如果未能解决你的问题,请参考以下文章