Widget简单组件 CheckBox复选框

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 **

在这里插入图片描述

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

在这里插入图片描述

猜你喜欢

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