【发布时间】:2011-09-06 04:58:08
【问题描述】:
是否可以在不使用图像的情况下创建类似单选按钮的按钮? 希望在选择时处于按下状态。然后当我点击其他选项时恢复正常状态。
【问题讨论】:
-
为该按钮定义 selector.xml 文件。
-
检查这是最佳答案:stackoverflow.com/a/55139080/1318946
标签: android
是否可以在不使用图像的情况下创建类似单选按钮的按钮? 希望在选择时处于按下状态。然后当我点击其他选项时恢复正常状态。
【问题讨论】:
标签: android
只需包含处于不同状态(即聚焦、按下、选中或正常)的单选按钮的相应可绘制对象。将这些包含在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.:不要忘记包含圆形按钮的可绘制对象,您必须自己搜索它们,或者从链接中给出的默认文件 (.android) 中获取]
【讨论】:
是的,您可以通过使用可绘制按钮的状态来做到这一点,例如 (我有可绘制的状态,你也可以有颜色。) 这是文件 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) {
for(btn in btnList) {
if(btn == button) {
btn.isPressed = true
} else {
btn.isPressed = false
}
}
}
【讨论】: