是否可以在不使用图像的情况下创建单选按钮等按钮? 想在选择时有一个紧迫的状态。然后当我点击其他选项时回到正常状态。
答案 0 :(得分:3)
简单地在单独的状态下包括单选按钮的相应抽屉(即聚焦,按压,检查或正常)。将它们包含在selector.xml
中以指定相应状态按钮的外观,并将该xml包含在按钮的android:background
属性中。应该做到这一切......! :)
点击此链接可更好地了解该方法:Change how a CheckBox looks (它是为CheckBox提供的,但类似的东西也适用于按钮作为单选按钮)。
编辑:
定义 round_button.xml ,如下所示:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_checked="true" android:state_focused="true"
android:drawable="@drawable/roundbutton_on_background_focus_yellow" />
<item android:state_checked="false" android:state_focused="true"
android:drawable="@drawable/roundbutton_off_background_focus_yellow" />
<item android:state_checked="false"
android:drawable="@drawable/roundbutton_off_background" />
<item android:state_checked="true"
android:drawable="@drawable/roundbutton_on_background" />
</selector>
然后,只要您需要包含该按钮,只需添加以下内容:
<Button android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/round_button"
android:checked="true"/>
[P.S。:不要忘记包括圆形按钮的drawables,你必须自己搜索它们,或者从链接中给出的默认文件(.android)中获取]
答案 1 :(得分:2)
是的,您可以通过使用可绘制按钮的状态来实现,例如 (我有一些状态可以绘制的可绘制对象。) 这是文件button_selector.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:state_pressed="true"
android:drawable="@drawable/dark_silver_filled_square" />
<item android:drawable="@drawable/light_silver_filled_square"/>
</selector>
将这样的可绘制文件作为背景放置到您的按钮上,如下所示:
<Button
android:id="@+id/allBtn"
android:layout_width="@dimen/_80sdp"
android:layout_height="@dimen/_22sdp"
android:layout_marginStart="16dp"
android:layout_marginTop="16dp"
android:background="@drawable/button_selector"
android:text="All"
android:textAllCaps="false"
app:layout_constraintBottom_toTopOf="@+id/btnTest"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.0" />
并在您的课程中以编程方式创建一个类似这样的按钮的ArrayList
private var btnList = ArrayList<Button>()
将XML按钮添加到列表中,如下所示:
btnList.add(allBtn)
然后将OnTouchListener设置为在按钮中保持选定的颜色,如下所示:
binding.allBtn.setOnTouchListener { v, event ->
buttonStatePreserver(allBtn)
true
}
并将其传递给一种方法,以保留对该特定按钮的选择,并使其他其余按钮未被选中:
fun buttonStatePreserver(button: Button) {
button.setOnTouchListener { v, event ->
for(btn in btnList) {
if(btn == button) {
btn.isPressed = true
} else {
btn.isPressed = false
}
}
true
}
}