我有一个白色背景的app小部件。部分显示的文字使用?android:textColorPrimary
,有些使用?android:textColorSecondary
,有些则使用我定义的颜色。
出于某种原因,当我在前牛轧糖(24或更低)上运行我的应用程序时,颜色为白色,使得文本在白色背景上不可见,但24和更高的任何内容显示为黑色或灰色。我定义的颜色总是好的。
还有趣的是,app小部件中的代码几乎与实际应用程序中的代码相同(均显示项目列表),应用程序版本(即使在这些较旧的API上)也使用黑暗颜色,但小部件由于某种原因为文本选择白色。
如果我通过我得到的样式中的XML代码进行跟踪:
<!-- The most prominent text color. -->
<attr name="textColorPrimary" format="reference|color" />
这是什么意思?它是如何知道最突出的文字颜色是什么?为什么小部件与应用程序不同,为什么只有较旧的API版本?
我能做些什么来解决这个问题,以便它保持一致吗?我使用相同的主题。为什么会这样?
注意:就设置特定颜色而言,这不是我所要求的。当然我可以将文本设置为黑色或其他东西,但我想使用这些样式,以便将来颜色可以根据需要改变,特别是因为我使用日/夜主题。也许它与此相关?好的我尝试了一个普通的主题,但问题仍然存在(文本在窗口小部件上是不可见的 - 只有窗口小部件 - 比早于API 24的版本)。
如果有任何不清楚的地方,请告诉我,我会更新问题。感谢。
答案 0 :(得分:1)
这(textColorPrimary)是什么意思?
这意味着,将应用当前主题android:textColorPrimary
中指定的值。因此,如果您已在xml中声明了TextView
并且已向其应用android:textColor="?android:textColorPrimary"
,那么此属性将从当前上下文的主题中获取,此布局将通过该主题膨胀。
它如何知道最突出的文字颜色是什么?
它从您已应用于您的活动的主题或从视图膨胀的上下文中获取该值(请参阅ContextThemeWrapper
和android:theme
)。它可能因平台版本而异。根据您使用的主题,它可能会有所不同,see themes.xml
。
您可以在主题中覆盖该属性:
<style name="AppTheme" parent="...">
...
<item name="android:textColorPrimary">@color/someColor</item>
</style>
现在,您已成功覆盖android:textColorPrimary
属性,因此此后,在引用?android:textColorPrimary
时,任何使用此主题的上下文夸大的视图都会看到此覆盖的值。
为什么小部件与应用程序不同,为什么只有较旧的API版本?
您的小部件可能已使用特定主题进行了充气,而应用具有不同的主题。如果它们具有相同的主题 - 那些属性将是相同的。
答案 1 :(得分:0)
嗯,?android:textColorPrimary
和?android:textColorSecondary
是属性,它们由系统解析。他们可以在不同的平台上使用它们,因为你可以参考Android属性。
如果您想自己定义它们,您需要创建自己的主题并将值放在那里。