如何使用Holo主题更改Android中按钮的背景颜色?

时间:2011-09-15 17:25:16

标签: android themes android-3.0-honeycomb

在开发Android应用时,我遇到了这个问题。使用Android 3.0 Holo Theme时,我无法改变按钮的样式。

在我的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">

如果我此时运行应用程序,我会获得默认的Holo主题按钮。但我想改变它们的颜色。这似乎是一个透明度问题,但我不确定在哪里看。

我尝试过创建自定义按钮样式。像这样简单:

    <?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>

但这对我不起作用。我试过的每一个组合都不起作用。

我知道它必须继承一些使其透明的属性,但我不知道哪一个。

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:1)

尝试使用android:drawable而不是android:color。

e.g。

<?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>

答案 1 :(得分: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 ) );

尝试使用矩阵,因为它可以产生不同的结果。也可以使用ColorCatrixColorFilter代替ColorMatrixColorFilter,它可以更容易处理但不灵活。