
6.1 按钮类组件(中级)
6.1.1 单选按钮
在默认情况下,单选按钮显示为一个圆形图标,并且在该图标旁边放置一些说明性文字。在程序中,一般将多个单选按钮放置在按钮组中,使这些单选按钮表现出某种功能,当用户选中某个单选按钮后,按钮组中的其他按钮将被自动取消选中状态。在Android手机应用中,单选按钮应用也十分广泛。例如,在使用陌陌社交工具注册新用户填写基本资料时,填写基本资料界面中的选择性别单选按钮。
通过<RadioButton>在XML布局文件中添加单选按钮的基本语法格式如下。

RadioButton组件的android:checked属性用于指定选中状态,属性值为true时,表示选中;属性值为false时,表示取消选中,默认为false。
通常情况下,RadioButton组件需要与RadioGroup组件一起使用,组成一个单选按钮组。在XML布局文件中,添加RadioGroup组件的基本格式如下。

例如,在页面中添加一个选择性别的单选按钮组和一个“提交”按钮,可以使用下面的代码。

在模拟器中运行上面这段代码,将显示如图6.1所示的运行结果。

图6.1 添加一个单选按钮组
在屏幕中添加单选按钮组后,还需要获取单选按钮组中选中项的值,通常存在以下两种情况。
1.在改变单选按钮组的值时获取
在改变单选按钮组的值时获取选中的单选按钮的值,首先需要获取单选按钮组,然后为其添加OnCheckedChangeListener,并在其onCheckedChanged()方法中根据参数checkedId获取被选中的单选按钮,并通过其getText()方法获取该单选按钮对应的值。例如,要获取id属性为radioGroup1的单选按钮组的值,可以通过下面的代码实现。

2.单击其他按钮时获取
单击其他按钮获取选中项的值时,首先需要在该按钮的单击事件监听器的onClick()方法中,通过for循环语句遍历当前单选按钮组,并根据被遍历到的单选按钮的isChecked()方法判断该按钮是否被选中,当被选中时,通过单选按钮的getText()方法获取对应的值。例如,要在单击“提交”按钮时,获取id属性为radioGroup1的单选按钮组的值,可以通过下面的代码实现。

下面通过一个实例演示单选按钮的具体应用。
【例6.01】 逻辑推理题(实例位置:资源包\源码\06\6.01)
在Android Studio中创建Module,名称为Radio Button。在该Module中实现本实例,具体步骤如下。
(1)修改新建Module的res/ayout目录下的布局文件activity_main.xml,将默认添加的布局管理器修改为垂直线性布局管理器,并修改默认添加的TextView组件用于显示逻辑推理题的文字内容,然后添加一个包含4个单选按钮的单选按钮组和一个“提交”按钮,关键代码如下。

(2)在主活动MainActivity的onCreate()方法中,获取“提交”按钮并为其添加单击事件监听器,在按钮的单击事件监听器的onClick()方法中,通过for循环语句遍历当前单选按钮组,并根据被遍历到的单选按钮的isChecked()方法判断该按钮是否被选中,当被选中时,通过单选按钮的getText()方法获取对应的值,并且将获取的值与正确答案的值进行比较,如果相同,则提示“回答正确”,否则给出解析及正确答案,关键代码如下。

(3)运行本实例,将显示如图6.2所示的界面。

图6.2 逻辑推理题的单选按钮组
6.1.2 复选框
在默认情况下,复选框显示为一个方块图标,并且在该图标旁边放置一些说明性文字。与单选按钮唯一不同的是,复选框可以进行多选设置,每一个复选框都提供“选中”和“不选中”两种状态。在Android手机应用中,复选框组件的应用也十分广泛。例如,在全民飞机大战游戏中,通过微信登录游戏时显示的授予权限界面,在该页面中将通过复选框显示已经授予的权限;亚马逊手机客户端的用户登录页面中的是否显示密码的复选框。
通过<CheckBox>在XML布局文件中添加复选框的基本语法格式如下。

由于使用复选框可以选中多项,所以为了确定用户是否选择了某一项,还需要为每一个选项添加事件监听器。例如,要为id为like1的复选框添加状态改变事件监听器,可以使用下面的代码。

下面通过一个实例来演示复选框的应用。
【例6.02】 模拟12306车票预订(实例位置:资源包\源码\06\6.02)
在Android Studio中创建Module,名称为Check Box,实现本实例的骤如下。
(1)修改新建Module的res/ayout目录下的布局文件activity_main.xml,将默认添加的布局管理器修改为相对布局管理器,然后添加两个CheckBox复选框控件和一个Button按钮控件,关键代码如下。

(2)在主活动MainActivity中,定义两个复选框并且在onCreate()方法中获取这两个复选框控件,代码如下。

(3)创建onClick()方法,该方法是“查询”按钮的单击事件,在该方法中通过if语句获取被选中的复选框所对应的值,然后通过一个提示信息框显示,代码如下。

(4)运行本实例,将显示如图6.3所示的界面,选中复选框,单击“查询”按钮,将弹出如图6.4所示的消息提示框。

图6.3 选中复选框

图6.4 获取复选框对应的值