【问题标题】:Android: How to create a button like radio button in a group?Android:如何在组中创建一个类似单选按钮的按钮?
【发布时间】:2011-09-06 04:58:08
【问题描述】:

是否可以在不使用图像的情况下创建类似单选按钮的按钮? 希望在选择时处于按下状态。然后当我点击其他选项时恢复正常状态。

【问题讨论】:

标签: android


【解决方案1】:

只需包含处于不同状态(即聚焦、按下、选中或正常)的单选按钮的相应可绘制对象。将这些包含在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) 中获取]

【讨论】:

  • 我明白了,但不知道如何开始。你会分享代码 sn-ps 吗?
  • 哦,我明白了,它将使用图像。有没有不使用图片的方法?
  • 我不知道。
  • 直到现在我都找不到关于如何在不使用图像的情况下创建一个的任何地方。所以,我会接受你的回答作为替代。谢谢
【解决方案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) {
        for(btn in btnList) {
                if(btn == button) {
                    btn.isPressed = true
                } else {
                    btn.isPressed = false
                }
            }
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-03
    • 2013-12-18
    相关资源
    最近更新 更多