在" ImageToggle"上更改颜色状态按键

时间:2016-10-04 06:08:25

标签: android android-layout

我目前有一组ToggleButtons,由RadioGroup包围,每个按钮指的是一个改变按钮状态颜色的选择器,并编写代码来实现无线电按钮式行为。这非常有效。 (编辑:我应该提到选择器是指向按钮的android:background元素)

选择器是这样的

<?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
        <item android:drawable="@color/gold"
              android:state_checked="true" />
        <item android:drawable="@color/white" />
    </selector>

现在我想要第二组按钮具有完全相同的行为。问题是,这一次,我想要一些图片,而不是文字。

有很多关于如何根据Button的状态更改图像的StackOverflow帖子,但我不想根据状态更改图像。我想根据状态更改按钮的颜色(图像具有透明背景)。

我真的试图避免自己修改按钮图像。

我认为解决方案涉及使用图层列表创建一个选择器,但这对我来说是一个新领域。

3 个答案:

答案 0 :(得分:2)

在res / values文件夹中创建名为colors.xml的xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="red">#ff0000</color>
    <color name="green">#00ff00</color>
</resources>

在drawable文件夹中,创建一个xml文件my_btn_toggle.xml:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_checked="false" android:drawable="@color/red"  />
    <item android:state_checked="true" android:drawable="@color/green"  />
</selector>

并在xml部分定义切换按钮:

<ToggleButton
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/btntoggle"
    android:background="@drawable/my_btn_toggle"/>

答案 1 :(得分:0)

显然需要做的是在选择器中创建一个分层的drawable,如下所示:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_checked="true">
        <layer-list>
            <item android:drawable="@color/gold"
                  android:gravity="fill"/>
            <item android:drawable="@drawable/image"
                  android:gravity="fill"/>
        </layer-list>
    </item>

    <item android:state_checked="false">
        <layer-list>
            <item android:drawable="@color/white"
                  android:gravity="fill"/>
            <item android:drawable="@drawable/image"
                  android:gravity="fill"/>
        </layer-list>
    </item>
</selector>

可变状态按钮选择器的标准方法是Priyank上面提到的。只是图形必须是透明的并且如上所述声明,这样它将与背景颜色分层以拉出颜色状态变化

答案 2 :(得分:0)

我认为您正在寻找 着色 属性 - 提及here

在您的情况下,请尝试将ColoStateList设置为android:tint属性。在ColorStateList doc中,您的示例显示了 颜色选择器 - 就像可绘制选择器一样,但是对于颜色。

(我不确定它是否已经支持Lollipop之前的设备,或者您应该使用旧版本的 PorterDuff过滤器进行编程。)