确保某些属性(例如 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" />

但是,对于果冻豆和姜饼,我得到了两种截然不同的效果。

果冻豆(看起来很棒!)

姜饼(呃……)

有什么便携的方法可以告诉我,在浅色背景上使用textAppearanceMediumtextAppearanceSmall 属性时,颜色应该是深色的。目前,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 上工作的可移植方式是啥的主要内容,如果未能解决你的问题,请参考以下文章

实体具有某些共同属性时的模型结构

基于实体属性确保 CoreData 实体唯一的最佳实践

确保两个属性始终不同的 Django 模型 - unique_together 是答案吗?

aria

swift-如何确保最初在哪个协议或类型中定义了特定属性?

如何使IntelliJ Idea停止警告某些属性?