文章目录
单选按钮和单选按钮组概述
在一组按钮中有且仅有一个按钮能够被选中,当选择按钮组中某个按钮时会取消其他按钮的选中状态。上述效果需要 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
运行结果