2017-08-06 54 views
0

比如認爲我們必須在值的顏色資源/ colors.xml爲:我可以爲特殊配置獲取顏色資源的顏色嗎?

<color name="navigation_drawer_overlay">#66000000</color> 

而且在相同顏色的資源值夜/ colors.xml爲:

<color name="navigation_drawer_overlay">#33AAAAAA</color> 

默認情況下,當我在java源代碼中獲取此顏色:

ContextCompat.getColor(getContext(), R.color.navigation_drawer_overlay); 

它將基於自動配置檢測進行提取。

但我想獲取特殊配置(對我來說價值晚版本)

有沒有辦法強迫取我的願望配置資源?

我可以強制獲取 - 夜間顏色資源嗎?

+0

我不明白你的問題你能解釋得更好嗎?當設置爲黑色時,顏色在夜間模式下可用。 –

+0

@BrunoFerreira!問題是在一些特殊情況下,getColor的返回值不是預期的! 例如,它在夜間模式下返回日值。 可能他們在將來的appcompat版本中解決了這個問題。 但現在我想通過強制它獲得夜間價值來解決這個問題。 – Mahpooya

+0

檢查我的答案,看看是否有幫助。 –

回答

1

你可以嘗試以下解決方法:

1)設置兩個顏色內colors.xml這樣的:

<color name="navigation_drawer_overlay_day">#66000000</color> 
<color name="navigation_drawer_overlay_night">#33AAAAAA</color> 

2)內部當你需要改變顏色做到這一點:

switch (AppCompatDelegate.getDefaultNightMode()) { 

      case AppCompatDelegate.MODE_NIGHT_YES: 

       ContextCompat.getColor(getContext(), R.color.navigation_drawer_overlay_night); 

       break; 

      case AppCompatDelegate.MODE_NIGHT_NO: 

       ContextCompat.getColor(getContext(), R.color.navigation_drawer_overlay_day); 

       break; 
     } 
+0

我目前使用此解決方法,但它非常醜陋! 如果我們可以強制獲得配置值,它將會非常漂亮。 – Mahpooya