之前觉得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" />