我正在尝试让标准的 Android ToggleButton 采用某种自定义样式:在未选中状态下不显示边框/背景填充,在选中状态下显示背景填充,按下(选中或未选中)时会产生涟漪效果显示从一种状态转换到另一种状态。
我的工作正常,大部分情况下使用它作为我的 ToggleButton 的背景:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/ripple" android:state_pressed="true"/>
<item android:drawable="@drawable/checked_bg" android:state_checked="true"/>
<item android:drawable="@android:color/transparent"/>
</selector>
波纹:
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="?android:attr/colorControlHighlight" >
<item
android:id="@android:id/mask">
<color
android:color="@android:color/white" />
</item>
</ripple>
已检查_bg:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle" >
<solid
android:color="?android:attr/colorControlHighlight" />
</shape>
但是,当我从选中状态转到未选中状态时,波纹将实心填充应用于与选中按钮状态填充颜色不匹配的按钮,因此它似乎立即从一种颜色“跳”到下一种颜色。我相信这是因为我将 colorControlHighlight 用于检查状态背景填充和波纹颜色,所以波纹最终以颜色结束,并以另一种稍浅的颜色开始......
但是,我不能简单地将检查状态背景填充更改为这种较浅的颜色,因为这会使我检查/打开按钮时的情况看起来很奇怪-它将以较浅的颜色开始,与检查的背景填充相匹配,并以较深的颜色结束,然后立即再次跳到较浅的颜色。
有没有一种干净的方法来处理这个?还是我在一端遇到了颜色变化的跳跃?
或者,我可以使用两种不同的涟漪,一种用于pressed = true 和checked = false,另一种用于pressed = true 和checked = true 情况,对吧?