2012-02-02 68 views
15

我有一個重音顏色,我通過我的佈局使用。我將它定義爲適用於TextView的樣式。根據主題設置顏色

我的應用程序讓用戶在黑暗的主題和輕的主題之間進行選擇。我想根據所選主題調整重音顏色。

  • 你不能在一個主題定義顏色
  • 你不能根據主題定義狀態列表顏色
  • 你不能根據主題不同的資源(如你可以爲版本或屏幕大小)
  • 您不能在這個???更新從代碼(???不是100%的資源色)

我應該如何控制根據所選擇的主題我的口音的顏色嗎?

開發指南給出了一個使用自定義顏色的主題示例,它接近我想要的。我需要能夠在運行時改變顏色。我知道我可以進入我的代碼和使用這種風格的X位置,我可以將組件的顏色和顏色設置爲這樣。但我想我可以通過風格/主題的某種組合來實現這一點。

感謝

回答

0

我解決了,這是通過創建android.widget.TextView的子類的方式。我創建了一個TextViewAccented和一個TextViewWarning。我在我想使用重音或警告顏色的XML中使用這些TextView。我從XML中刪除任何顏色引用。

子類包含三個默認的構造函數。所有這三個構造函數都調用一個名爲setColor()的私有方法。 setColor()然後檢查選定的主題,並可根據當前選定的主題使用所需的陰影。

這是一個相當乾淨的機制,但很難相信我無法在主題中編碼。這似乎正是一個主題應該是。

23

我在同一個問題上掙扎,接近做類似於你想出的東西,幸運的是我找到了下面的解決方案,我也說過here

首先定義在attr.xml定製色域

<?xml version="1.0" encoding="utf-8"?> 
<resources> 

<attr name="titleColor" format="reference|color" /> 
<attr name="introColor" format="reference|color" /> 

</resources> 

下一個定義你的主題

<style name="AppTheme.MyLight" parent="android:Theme"> 
    <item name="titleColor">#FFFFFF</item> 
    <item name="introColor">#FFFFAA</item> 
</style> 


<style name="AppTheme.MyDark" parent="android:Theme"> 
    <item name="titleColor">#000000</item> 
    <item name="introColor">#004444</item> 
</style> 
在佈局

最後

<TextView 
    android:id="@+id/quoteTitle" 
    android:textColor="?titleColor" 
    ... 
</TextView> 

<TextView 
    android:id="@+id/quoteIntro" 
    android:textColor="?introColor" 
    ... 
</TextView> 

好像有在官方的Android文檔中沒有關於使用屬性的解釋。我發現的最佳資源是here