使用无边框按钮样式切换按钮 - 如何在已检查状态下获取背景?

时间:2015-02-19 23:42:33

标签: android button android-5.0-lollipop rippledrawable

我正在尝试使用标准的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>

checked_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>

但是,当我从检查状态进入未检查状态时,纹波会对与检查的按钮状态填充颜色不匹配的按钮应用实心填充,因此它会显示为&#34;跳转&#34;立即从一种颜色到下一种颜色。我相信这是因为我使用colorControlHighlight来检查状态背景填充和纹波颜色,因此纹波最终会变成颜色,并从另一个稍微浅一些的颜色开始......

然而,我不能简单地将我检查的状态背景填充更改为这种较浅的颜色,因为当我检查/打开按钮时看起来很奇怪 - 它会以较浅的颜色开始,匹配选中的背景填充,并以较暗的颜色结束,然后立即再次跳转到较浅的颜色。

有没有一个干净的方法来处理这个?或者我在一端遇到颜色变化的跳跃?

或者我可以使用两个不同的涟漪,一个用于press = true和checked = false,另一个用于press = true和checked = true的情况,对吗?

0 个答案:

没有答案