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