2012-01-25 28 views
14

我在attrs.xml了Android的顏色選擇不使用自定義屬性的工作

<resources> 
    <!-- theme specific colors --> 
    <attr format="reference|color" name="foreground" /> 
    <attr format="reference|color" name="background" /> 
</resources> 

然後在theme.xml

<style name="MyTheme" parent="android:Theme.Black"> 
    <item name="android:windowNoTitle">true</item> 
    <item name="foreground">#0000FF</item> 
    <item name="background">#00FF00</item> 
</style> 

我還創建顏色選擇器名爲forground_to_background.xml

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_pressed="true" android:color="?background"/> <!-- pressed --> 
    <item android:state_focused="true" android:color="?background"/> <!-- focused --> 
    <item android:color="?foreground"/> <!-- default --> 
</selector> 

現在我想在TextView中一起使用它:

<TextView 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:textColor="@color/forground_to_background" /> 

遺憾的是它不工作。我只有一種顏色 - 紅色,而不是有很好的綠色藍色。 TextView始終是紅色的。當我改變TextView使用「前景」顏色會改變。此外,當我更改顏色從「?xxxx」選擇硬編碼值爲「#00f」顏色開始工作。

問題在哪裏?我究竟做錯了什麼?

編輯: 我認爲這是重複的問題/錯誤Can a selector resource use a color defined in a style?

EDIT2的: 此外,當我嘗試使用這個TextView的ListView中的應用程序崩潰。它無法解析XML。

+0

顯然,這個問題被固定在Android L移動預覽,詳情點擊這裏:https://code.google.com/p/android/issues/detail?id=26251 –

+0

你找到你的問題的答案嗎?我有同樣的問題 – Pavya

回答

5

之所以出現這種情況是,我有不同的上下文。雖然充氣上下文知道我的主題attrs,但對ListView適配器我傳遞了ApplicationContext,不知道這些attrs。現在我不知道爲什麼它不知道他們;?)

+0

更多有關上下文去這裏:http://www.doubleencore.com/2013/06/context/不同的上下文知道不同的東西... – Mikooos

+0

這樣一個愚蠢的錯誤我是敲我的頭牆壁。我從來沒有想過我會出現這樣一個簡單的錯誤。你拯救了我的一天。 –

0

確定,如果你申請的MyTheme的活動或TextView的? 你可以嘗試的另一件事是,而不是使用「?」在forground_to_background.xml中運行,嘗試使用「@」代替。看看是否能解決您的問題

+0

我很積極,我使用MyTheme :)我不能使用「@」項目將無法編譯。 – Mikooos

+0

我認爲?前景不行。嘗試使用@顏色/前景 – CChi

11

不能引用ATTR /選擇爲選擇顏色時。你可以做什麼,如果你想在你的選擇器中使用主題顏色,就是創建多個選擇器,它們引用@ color /和@ drawable /,然後有一個「引用」attr,它將一個選擇器與給定的樣式相關聯。

<attr name="forground_to_background" format="reference" />

然後你必須設置文本顏色像

android:textColor="?attr/forground_to_background" 

我相信文總是紅色的,因爲Android的是解釋ATTR的整數值的顏色(紅色),而不是使用它作爲你真正想要的東西的一個查找。