0

我有一个白色背景的应用小部件。一些显示的文字使用?android:textColorPrimary,一些使用?android:textColorSecondary,一些使用我定义的颜色。为什么?android:textColorPrimary在不同的API版本中获得不同的值?

由于某些原因,当我在预先牛轧糖(24或更低)上运行我的应用程序时,颜色是白色的,使得文本在白色背景上不可见,但任何24和更高显示为黑色或灰色。我定义的颜色总是可以的。

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

如果我穿过的款式,我得到这个XML代码追踪:

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

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

有什么我可以做些什么来解决这个以便它是否一致?我使用相同的主题。为什么会发生?

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

请让我知道,如果有不清楚的地方,我会更新的问题。谢谢。

+0

由于不同的操作系统版本使用不同的主题。 –

+0

你能更具体一点吗?为什么对于应用程序小部件而言,主题与同一操作系统版本的应用程序不同?我只使用appCompat主题。好吧,无论如何这都是主题。一定。只是不知道是什么。 –

+0

不确定。但是我从Windows桌面借用了一个老技巧(解决方法!):**阴影**(按照向右和向右移动,所以灯光来自左上角,如预期的那样)。白色背景上的白色文字由于黑色(黑色)阴影仍然可见。黑色屏幕上的影子几乎看不见,只留下文字。 –

回答

1

这是什么(textColorPrimary)是什么意思?

这意味着,将应用当前主题的android:textColorPrimary中指定的值。所以,如果你已经宣布在XML TextView并已申请android:textColor="?android:textColorPrimary"它,那么这个属性将不会发生任何与此布局正在膨胀当前上下文的主题取出。

它怎么知道最突出的文本颜色是什么?

它取出由已应用到你的活动或与该观点被膨胀的背景下,主题是值(见ContextThemeWrapperandroid:theme)。它可能会有所不同,从平台版本到平台版本。根据您使用的主题,它可能有所不同,see themes.xml

可以覆盖属性在你的主题:

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

现在,您已经成功覆盖android:textColorPrimary属性,所以此后指当正在与这一主题的背景下会看到这种重写的价值膨胀的任何视图到?android:textColorPrimary

为什么它在窗口小部件和应用程序中有所不同,为什么只有在较老的API版本上才有这种不同?

您的小部件可能已经被特定的主题夸大了,而应用程序有不同的主题。如果他们有相同的主题 - 那些属性将是相同的。

+0

据我可以告诉我正在使用相同的主题的小部件和应用程序的其余部分。否则,即使在API 24及以上版本,它肯定会有所不同。不会吗?这可能会改变,但也许你可以在这里检查我的样式页面:https://github.com/mvescovo/item-reaper/blob/master/app/src/main/res/values/styles.xml什么看起来很奇怪? –

+0

您的视图在回购中如何以及在哪里膨胀? – azizbekian

+0

好吧我已经想到了这一点,并得出这样的结论:它是毫无意义的担心这些“?android:textColorPrimary”类型的颜色将是什么(以问号开头的),因为它看起来不像它(日夜主题)将能够自行更新小部件背景。所以基本上看来我需要手动更新它,也可以使用你已经解释的方法明确地设置文本颜色。所以我认为这是正确的答案。谢谢你的帮助! –

0

好,?android:textColorPrimary?android:textColorSecondary是属性,并且它们通过系统解决。因为您引用了Android属性,所以它们可以在不同平台上有所不同。

如果你想自己来定义他们,你需要创建yourown主题,并把该值存在。

+0

这不是我要问的。我已经知道这一点。他们如何确定这些信息?我倾向于认为我的应用程序有一些有趣的内容,但我不知道还有什么可以看的。我试着看一个示例应用程序(与我的应用程序不同),并找到了这样一个:https://github.com/hjanetzek/android-support-v7-appcompat/blob/master/res/values/styles_base_text.xml。使用?android:textColorPrimary进行一些更改以设置文本颜色后,它在所有版本中都显示为白色。所以它是一致的。我不是因为某种原因。 –

+0

我在寻找关于为什么它可能在我的应用程序中不一致的想法,以及为什么系统会选择浅色而不是深色,反之亦然。那么也许我可以找到问题。 –

相关问题