将状态选择器应用于按钮

时间:2019-04-22 20:54:46

标签: android

我有一个按钮,希望其状态根据是否被选择而改变。很正常的用例。我希望它的文本和背景色都可以切换。请注意,由于其他格式要求,我不想使用ToggleButton。

在我的实现中,文本会根据需要进行更改,但背景颜色不会更改。实际上,根本无法正确设置背景色。它以某种默认的蓝色开始,并且无论按钮单击如何,它都不会改变。

在布局xml文件中:

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="button"
    android:textColor="@color/selector_button_text"
    android:background="@drawable/selector_button" />
可绘制对象中的

selector_button.xml:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:state_focused="true">
        <shape android:shape="rectangle">
            <solid android:color="@color/blue" />
        </shape>
    </item>
    <item android:state_pressed="true">
        <shape android:shape="rectangle">
            <solid android:color="@color/blue" />
        </shape>
    </item>
    <item android:state_selected="true">
        <shape android:shape="rectangle">
            <solid android:color="@color/blue" />
        </shape>
    </item>
    <item>
        <shape android:shape="rectangle">
            <solid android:color="@android:color/white" />
            <stroke android:width="1dp" android:color="@color/blue" />
        </shape>
    </item>
</selector>

res / color中的selector_button_text(此文件产生正确的结果)

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_selected="true" android:color="@android:color/white" />
    <item android:state_pressed="true" android:color="@android:color/white" />
    <item android:state_focused="true" android:color="@android:color/white" />
    <item android:color="@color/blue" /> <!-- default case -->
</selector>

最后在视图控制器中:

my_button.setOnClickListener {
    it.isSelected = !it.isSelected
}

0 个答案:

没有答案