2011-09-15 32 views
1

在Android應用上工作時,我遇到了這個問題。使用Android 3.0 Holo主題時,我無法更改按鈕的樣式。如何使用Holo主題更改Android中Button的背景顏色?

在我theme.xml文件是這樣的:

<resources> 
    <style name="Test" parent="android:Theme.Holo"> 
    </style> 
</resources> 

我manifest.xml文件有這樣的:

<application android:icon="@drawable/my_icon" 
    android:label="@string/app_name" android:debuggable="false" android:theme="@style/Test"> 

如果我在這個時候運行的應用程序,我得到默認霍洛主題鈕釦。但我想改變它們的顏色。這似乎是一個透明度問題,但我不確定在哪裏尋找。

我試着創建一個自定義按鈕樣式。這樣簡單的事情:

<?xml version="1.0" encoding="utf-8"?> 
    <selector xmlns:android="http://schemas.android.com/apk/res/android"> 
     <item android:state_selected="true" android:color="@android:color/black" /> 
     <item android:state_focused="true" android:color="@android:color/white" /> 
     <item android:state_pressed="true" android:color="@android:color/white" /> 
     <item android:color="#f8f8f8" /> 
    </selector> 

雖然這並不適用於我。我試過的每個組合都不起作用。

我知道它必須繼承一些讓它透明的屬性,但我不知道哪一個屬性是透明的。

任何幫助,將不勝感激。

回答

1

嘗試使用android:drawable而不是android:color。

例如

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_selected="true" android:drawable="@android:color/black" /> 
    <item android:state_focused="true" android:drawable="@android:color/white" /> 
    <item android:state_pressed="true" android:drawable="@android:color/white" /> 
    <item android:drawable="#f8f8f8" /> 
</selector> 
0

由於按鈕確實有一個背景繪製您可以調整這種背景繪製。必須指出,這個背景是半透明的,所以色調不會100%。雖然這在Holot黑暗主題上看起來相當不錯。

這裏是你如何做到這一點:

Drawable bgDrawable = button.getBackground(); 

ColorMatrix cmDesat = new ColorMatrix(); 
cmDesat.setSaturation(0); 
ColorMatrix cm = new ColorMatrix(); 
cm.set(new float[]{ 
    r, 0, 0, 0, 0, 
    0, g, 0, 0, 0, 
    0, 0, b, 0, 0, 
    0, 0, 0, 1, 0 
}); 
cmDesat.postConcat(cm); 
bgDrawable.setColorFilter(new ColorMatrixColorFilter(cmDesat)); 

嘗試與基體實驗,因爲它可以產生不同的結果。而不是ColorMatrixColorFilter,您可以簡單地使用LightingColorFilter,它更易於處理,但不夠靈活。