文章目录
CheckBox复选框
CheckBox复选框是一种具有双状态的按钮,具有选中或者未选中两种状态。在布局文件中定义复选按钮时,对每一个按钮注册OnCheckedChangeListener事件监听,然后在onCheckedChanged()事件处理方法中根据isChecked参数来判断选项是否被选中。
CheckBox和 RadioButton的主要区别如下:
- RadioButton单选按钮被选中后,再次单击时无法改变其状态,而CheckBox复选框被选中后,可以通过单击来改变其状态。
- 在RadioButton单选按钮组中,只允许选中一个;而在CheckBox复选框中,允许同时选中多个。
- 在大部分UI框架中RadioButton默认都以圆形表示,CheckBox 默认都以矩形表示。
代码演示
下面通过一个简单的示例演示CheckBox的用法﹐以“体育爱好”的多选为例,人们的“体育爱好”可能有足球、篮球等,而人的性别选择有所不同,性别只能选择“男”或“女”,且两者互斥。
布局代码如下
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center_horizontal"
android:orientation="vertical">
<!-- 基本显示 1 -->
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/title"
android:textSize="20sp"
android:textStyle="bold"
/>
<!--足球 2 -->
<CheckBox
android:id="@+id/checkbox1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/football"
android:textSize="16sp"
/>
<!-- 篮球 3 -->
<CheckBox
android:id="@+id/checkbox2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/basketball"
android:textSize="16sp"
/>
<!-- 排球 4 -->
<CheckBox
android:id="@+id/checkbox3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/volleyball"
android:textSize="16sp"
/>
</LinearLayout>
代码解释如下:标号1处的TextView用于显示用户的标题;标号2处定义的是“足球”复选框;标号3处定义的是“篮球”复选框;标号4处定义的是“排球”复选框。
上述代码中,复选框的文本部分使用了字符串资源﹐例如“足球”的文本是引用的strings.xml文件中的字符串
strings.xml中的字符串定义如下所示
<resources>
<string name="title">你喜欢的运动是:</string>
<string name="app_name">复选框测试</string>
<string name="football">足球</string>
<string name="basketball">篮球</string>
<string name="volleyball">排球</string>
</resources>
通常在开发过程中使用strings.xml文件的目的如下
- 为了国际化。Android建议将屏幕中显示的文字定义在strings.xml 中,如果今后需要进行国际化时仅需要修改string.xml文件即可。
- 为了减少应用的体积,降低数据的冗余。
下面在相应的Activity中演示复选框的使用,当用户选择不同的“爱好”时,在屏幕上显示用户的选择结果
代码如下
package com.qst.demo2;
import android.os.Bundle;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
public class CheckBoxDemoActivity extends AppCompatActivity {
//声明复选框 1
private CheckBox footballChx;
private CheckBox basketballChx;
private CheckBox volleyballChx;
@Override //重写父类的onCreate方法
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); //调用父类的onCreate方法创建Activity
setContentView(R.layout.checkbox_demo); //设置布局
//通过findViewById获得CheckBox对象 2
footballChx = (CheckBox) findViewById(R.id.checkbox1);
basketballChx = (CheckBox) findViewById(R.id.checkbox2);
volleyballChx = (CheckBox) findViewById(R.id.checkbox3);
//注册事件监听器 3
footballChx.setOnCheckedChangeListener(listener);
basketballChx.setOnCheckedChangeListener(listener);
volleyballChx.setOnCheckedChangeListener(listener);
}
//使用内部类形式的响应事件 4
private CompoundButton.OnCheckedChangeListener listener = new CompoundButton.OnCheckedChangeListener() {
@Override //重写接口的方法
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
switch (buttonView.getId()) {
case R.id.checkbox1:
//选择足球
if (isChecked) {
//Toast的使用 5
Toast.makeText(CheckBoxDemoActivity.this, "你喜欢足球",
Toast.LENGTH_LONG).show();
}
break;
case R.id.checkbox2:
//选择篮球
if (isChecked) {
Toast.makeText(CheckBoxDemoActivity.this, "你喜欢篮球",
Toast.LENGTH_LONG).show();
}
break;
case R.id.checkbox3:
//选择排球
if (isChecked) {
Toast.makeText(CheckBoxDemoActivity.this, "你喜欢排球",
Toast.LENGTH_LONG).show();
}
break;
default:
break;
}
}
};
}
代码解释如下:标号1处定义了3个CheckBox复选框,供用户进行选择;标号2处对标号1处所定义的各个属性变量初始化,通过对属性变量的赋值,使其可以进行后续的业务逻辑操作;标号3处分别为3个CheckBox对象设置监听器,用于监听各自的选中或取消事件;标号4处定义了一个监听器对象,用于监听并实现3个CheckBox的业务逻辑功能,当用户单击不同的CheckBox时,屏幕上会通过Toast对象显示相应的文本信息。Toast是 Android中用来显示提示信息的一种机制,与 Dialog 不同的是:Toast 提示没有焦点,且时间有限,在一定的时间后会自动消失。
**在AndroidMainfest.xml清单文件中声明Activity **
运行结果