在开发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>
但这对我不起作用。我试过的每一个组合都不起作用。
我知道它必须继承一些使其透明的属性,但我不知道哪一个。
任何帮助都将不胜感激。
答案 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,它可以更容易处理但不灵活。