Widget简单组件 单选按钮和单选按钮组

单选按钮和单选按钮组概述

在一组按钮中有且仅有一个按钮能够被选中,当选择按钮组中某个按钮时会取消其他按钮的选中状态。上述效果需要 RadioButton和 RadioGroup配合使用才能实现。RadioGroup是单选按钮组,是一个允许容纳多个RadioButton 的容器。在没有RadioGroup的情况下,RadioButton可以分别被选中;当多个RadioButton同在一个RadioGroup按钮组中时,RadioButton 只允许选择其中之一。不同的RadioGroup 中 ,RadioButton互不影响。

RadioGroup类是LinearLayout的子类,其常用的设置和控制单选按钮组的方法如下图所示

RadioButton 相关方法

方法 功能描述
getCheckedRadioButtonId() 获取被选中按钮的ID
clearCheck() 清除选中状态
check(int id) 通过参数D来设置该选项为选中状态;如果传入一1则清除单选按钮组的勾选状态,相当于调用clearCheck()操作
setOnCheckedChangeListener( RadioGroup.OnCheckedChangeListenerlistener) 在一个单选按钮组中,当该单选按钮勾选状态发生改变时所要调用的回调函数。当 RadioButton的checked属性为true时,check(id)方法不会触发onCheckedChanged事件
addView ( View child, int index,ViewGroup.LayoutParams params) 使用指定的布局参数添加一个子视图。其中:child 为所要添加的子视图;index为将要添加子视图的位置;params为所要添加的子视图的布局参数
getText() 用于获取单选框的值

通过OnCheckedChangeListener监听器可对单选按钮的状态切换进行监听并处理。

代码演示

下面通过一个简单的实例演示RadioButton和 RadioGroup的使用

在这里插入图片描述

在这里插入图片描述

布局代码如下

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="left"
    android:orientation="vertical">
    <!-- 显示选择的内容 1 -->
    <TextView
        android:id="@+id/chooseTxt"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="我选择的是...?"
        android:textSize="30sp" />
    <!-- 单选按钮组 2 -->
    <RadioGroup
        android:id="@+id/radioGroup"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">
        <RadioButton
            android:id="@+id/radioButton1"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:text="按钮1"/>
        <RadioButton
            android:id="@+id/radioButton2"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:text="按钮2"/>
    </RadioGroup>
    <!--清除所有选中的状态 3 -->
    <Button
        android:id="@+id/radio_clearBtn"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:text="清除选中"/>
    <!-- 往按钮组中添加新的单选按钮 4 -->
    <Button
        android:id="@+id/radio_addBtn"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:text="添加子项"/>
</LinearLayout>

代码解释如下:标号1处用于显示当前选中按钮的标题;标号2处定义了一个单选按钮组,并为该按钮组添加了两个单选按钮﹔标号3处定义了一个“清除”按钮﹐用于清除按钮组中所有单选按钮的选中状态﹔标号4处定义了一个“添加子项”按钮,用于向按钮组中添加新的互斥的单选按钮。

接下来在对应的Activity中演示按钮组的使用,实现清除按钮组中所有按钮的选中状态,以及向按钮组中添加新的单选按钮的功能
在这里插入图片描述在这里插入图片描述

代码如下

package com.qst.demo2;

import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.TextView;

import androidx.appcompat.app.AppCompatActivity;

public class RadioButtonActivity extends AppCompatActivity {
    
    
    private TextView chooseTxt;   //显示选择的单选按钮文本 1
    private RadioGroup radioGroup;  //按钮组
    //多个单选按钮
    private RadioButton radioButton1;
    private RadioButton radioButton2;
    private Button radioClearBtn; //清除按钮
    private Button radioAddBtn;   //新增按钮
    @Override   //重写父类的onCreatefangfa
    protected void onCreate(Bundle savedInstanceState) {
    
    
        super.onCreate(savedInstanceState);  //调用父类onCreate方法创建Activity
        setContentView(R.layout.radiobutton_demo);   //设置布局为radiobutton_demo
        //初始化按钮 2
        chooseTxt = (TextView) findViewById(R.id.chooseTxt);
        radioGroup = (RadioGroup) findViewById(R.id.radioGroup);
        radioButton1 = (RadioButton) findViewById(R.id.radioButton1);
        radioButton2 = (RadioButton) findViewById(R.id.radioButton2);
        radioGroup.setOnCheckedChangeListener(onCheckedChangeListener); //设置监听器
        //清除选中状态
        radioClearBtn = (Button) findViewById(R.id.radio_clearBtn);   //初始化
        radioClearBtn.setOnClickListener(onClickListener);  //设置监听器
        //增加子选项
        radioAddBtn = (Button) findViewById(R.id.radio_addBtn); //初始化
        radioAddBtn.setOnClickListener(onClickListener);  //设置监听器
    }
    /** 定义按钮组的监听事件 3 */
    private RadioGroup.OnCheckedChangeListener onCheckedChangeListener  //创建对象
            = new RadioGroup.OnCheckedChangeListener() {
    
      //使用内部类的监听器
        @Override   //重写方法
        public void onCheckedChanged(RadioGroup group, int checkedId) {
    
    
              //获取当前选中的按钮的Id
            switch (radioGroup.getCheckedRadioButtonId()) {
    
    
                case R.id.radioButton1:
                    chooseTxt.setText("我选择的是:" + radioButton1.getText());
                    break;
                case R.id.radioButton2:
                    chooseTxt.setText("我选择的是:" + radioButton2.getText());
                    break;
                default:
                    chooseTxt.setText("我选择的是: 新增" );
                    break;
                    }
        }
    };
    //定义清除状态按钮和新增按钮的单击事件 4
    private View.OnClickListener onClickListener = new View.OnClickListener() {
    
    //使用外部类的监听器
        @Override  //重写父类方法
        public void onClick(View view) {
    
    
            switch (view.getId()) {
    
    
                case R.id.radio_clearBtn:
                    radioGroup.check(-1);
                    chooseTxt.setText("我选择的是...?");
                    break;
                case R.id.radio_addBtn:
                    //新增子选项
                    RadioButton newRadio = new RadioButton(RadioButtonActivity.this);
                    newRadio.setLayoutParams(new ViewGroup.LayoutParams(
                            ViewGroup.LayoutParams.MATCH_PARENT, RadioGroup.LayoutParams.MATCH_PARENT));
                    newRadio.setText("新增");
                    radioGroup.addView(newRadio, radioGroup.getChildCount());
                    break;
                default:
                    break;
            }
        }
    };
}

代码解释如下:标号1处定义了一个TextView类型的属性变量chooseTxt,用于获取当前被选中按钮的文本,其他属性的定义类型;标号2处对标号1处所定义的各个属性变量进行初始化,通过对属性变量的赋值,使其可以进行后续的业务逻辑操作﹔标号3处定义了一个按钮组监听器对象,用于获取当前在按钮组中选中的单选按钮对象,并将文本显示在chooseTxt对象上;标号④处定义一个普通按钮监听器对象﹐用于实现radioClearBtn和 radioAddBtn的业务逻辑功能,当用户单击radioClearBtn按钮时,按钮组中被选中的单选按钮状态被清空﹔当用户单击radioAddBtn时,系统会在radioGroup对象中增加一个单选按钮对象。

在AndroidMainfest.xml清单文件中声明Activity
在这里插入图片描述

运行结果
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_42768634/article/details/115262978