Android工作中的问题记录Android

Android 修改button颜色

2020-01-22  本文已影响0人  lambentlight

之前觉得button颜色修改,直接修改background就行了,但是会引发一系列的问题。比如原来的波纹效果没有了,button的状态改变的时候(例如,被禁用了),button的颜色没有任何变化。

这里针对这个问题做一个方法的小结


普通Button的解决方法

普通的Button,解决方法比较常见,直接使用Drawable,自己做一个selector,需要点击的波纹效果的话,加上<ripper>,之后添加一个例子:

栗子

MaterialButton的解决方法

进入Material设计以后,MaterialButton使用起来和普通button有一些区别。

在将app的主题设置为Theme.MaterialComponents.Light.NoActionBar的时候。
我们的button颜色会默认变成colorAccent的颜色。
MaterialButton的background属性不起作用了,必须要设置
app:backgroundTint才有效果。

但是设置这个属性以后,我们的button在改变状态的时候,颜色就不会发生变化了(点击的波纹效果会变化)。

1、 如果希望状态改变,背景颜色也改变的条件下,修改button颜色
MaterialButton的颜色是根据主题的colorAccent来决定的,那么就单独给MaterialButton设置一个主题

注意,这里要使用android:theme="@style/ButtonStyle"来设置主题,不是使用style

并且在主题中,设置colorAccent为想要的颜色

 <style name="ButtonStyle" parent="Theme.MaterialComponents.Light.NoActionBar">
        <item name="colorAccent">@color/colorAccent</item>
 </style>

这样,就满足我们的需求了

2、引申一下,MaterialButton的在禁用状态下,button的颜色是固定的,全部都是灰色,如果希望修改这个颜色怎么办

如果我们的button普通情况下是红色,在禁用的情况下,让他遍成浅红色。
我这边找了很多方法,但是没有直接修改禁用状态button的颜色的
我这边提供了一个比较取巧的方法:

首先我们知道app:backgroundTint设置以后,禁用状态的下,button颜色不会改变,那么我们可以把手动用代码,在按钮禁用状态下,把button的alpha设置一下,让视觉效果看起来像是禁用状态的。

<com.google.android.material.button.MaterialButton
                        style="@style/ButtonStyle"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_marginStart="12dp"
                        android:layout_marginTop="12dp"
                        android:layout_marginEnd="12dp"
                        android:layout_marginBottom="12dp"
                        android:alpha="0.2"
                        android:enabled="false"
                        app:backgroundTint="#898989" />
上一篇 下一篇

猜你喜欢

热点阅读