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

我在尋找關於爲什麼它可能在我的應用程序中不一致的想法,以及爲什麼系統會選擇淺色而不是深色,反之亦然。那麼也許我可以找到問題。 –

相關問題