5

我正在尝试让标准的 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 情况,对吧?

4

0 回答 0