gpt4 book ai didi

android - 为什么?android :textColorPrimary get different values with different API versions?

转载 作者:行者123 更新时间:2023-11-29 19:10:09 28 4
gpt4 key购买 nike

我有一个白色背景的应用程序小部件。一些显示的文本使用 ?android:textColorPrimary,一些使用 ?android:textColorSecondary,还有一些使用我定义的颜色。

但出于某种原因,当我在 pre Nougat(24 位或更低版本)上运行我的应用程序时,颜色为白色,因此文本在白色背景上不可见,但 24 位及更高版本显示为黑色或灰色。我定义的颜色总是可以的。

同样有趣的是,应用程序小部件中的代码几乎与实际应用程序相同(均显示项目列表)并且应用程序版本(即使在这些较旧的 API 上)使用深色,但出于某种原因小部件选择文本为白色。

如果我跟踪样式中的 XML 代码,我会得到:

    <!-- The most prominent text color.  -->
<attr name="textColorPrimary" format="reference|color" />

这是什么意思?它如何知道最突出的文本颜色是什么?为什么它在小部件和应用程序中有所不同,为什么只在较旧的 API 版本上有所不同?

我能做些什么来解决这个问题以使其保持一致吗?我正在使用相同的主题。为什么会这样?

注意:就设置特定颜色而言,这不是我要问的。当然,我可以将文本设置为黑色或其他颜色,但我想使用这些样式,以便将来可以根据需要更改颜色,尤其是因为我使用的是日/夜主题。也许与此有关?好的,我尝试了一个普通的主题,但问题仍然存在(文本在小部件上不可见 - 只有小部件 - 在 API 24 之前)。

如果有任何不清楚的地方,请告诉我,我会更新问题。谢谢。

最佳答案

What does this (textColorPrimary) mean?

这意味着,将应用当前主题的 android:textColorPrimary 中指定的值。所以,如果你在 xml 中声明了一个 TextView 并且应用了 android:textColor="?android:textColorPrimary" ,那么这个属性将从主题中获取此布局正在膨胀的当前上下文。

How does it know what the most prominent text colour is?

它从您应用到您的 Activity 的主题或从 View 被膨胀的上下文中获取该值(参见 ContextThemeWrapperandroid:theme ).它可能因平台版本而异。根据您使用的主题,它可能会有所不同,see themes.xml .

您可以在主题中覆盖该属性:

<style name="AppTheme" parent="...">
...
<item name="android:textColorPrimary">@color/someColor</item>
</style>

现在,您已经成功覆盖了 android:textColorPrimary 属性,因此此后任何使用此主题的上下文膨胀的 View 在引用 ?android:textColorPrimary 时都会看到这个覆盖的值

Why is it different in the widget vs the app, and why only on older API versions?

您的小部件可能已使用特定主题进行了扩充,而应用具有不同的主题。如果他们有相同的主题 - 这些属性将是相同的。

关于android - 为什么?android :textColorPrimary get different values with different API versions?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45657033/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com