2011-09-15 25 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,它更易于处理,但不够灵活。