【问题标题】:How do you change the background color of a Button in Android using the Holo Theme?如何使用 Holo 主题更改 Android 中按钮的背景颜色?
【发布时间】:2011-09-15 17:25:16
【问题描述】:

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

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

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

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

任何帮助将不胜感激。

【问题讨论】:

    标签: android themes android-3.0-honeycomb


    【解决方案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>
    

    【讨论】:

      【解决方案2】:

      由于按钮确实具有背景可绘制对象,因此您可以为该背景可绘制对象着色。必须注意的是,这个背景是半透明的,所以色调不会是 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 ) );
      

      尝试使用矩阵进行试验,因为它可以产生不同的结果。此外,您可以简单地使用 LightingColorFilter 来代替 ColorMatrixColorFilter,它更容易处理但不够灵活。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-07-05
        • 1970-01-01
        • 2021-03-18
        • 2011-06-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多