Android:如何在组中创建像单选按钮一样的按钮?

时间:2011-09-06 04:58:09

标签: android

是否可以在不使用图像的情况下创建单选按钮等按钮? 想在选择时有一个紧迫的状态。然后当我点击其他选项时回到正常状态。

2 个答案:

答案 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
        }
    }