Android学习笔记(十):简单UI组件----按钮类组件(单选按钮RadioButton和复选框CheckBox)

按钮类组件(单选按钮RadioButton和复选框CheckBox)

  1. 单选按钮RadioButton
  • 单选按钮:通常显示为一个圆形的图标,并且在图标旁放置了一些说明性的文字。多数情况下单选按钮都是成组出现的,在一组单选按钮中同一时间只有一个能被选中。
    在这里插入图片描述
    在activity_main.xml文件中,使用RadioButton标签来定义单选按钮。
    在这里插入图片描述

  • 属性:

    • android:text :为单选按钮添加说明文字。
      在这里插入图片描述
    • android:checked :设置单选按钮默认选中。取值为true则默认选中;反之为默认不选中。默认取值为false。
      在这里插入图片描述
  • RadioGroup标签来设置单选按钮组:
    在这里插入图片描述
    在这里插入图片描述
    如果不用RadioGroup包裹这三个RadioButton,就不是一个单选按钮组。因为每个按钮都可以同时被选中。

  • 获取单选按钮组中选中单选按钮的值:

    • 方法一:在选中状态改变时获取(本来选择的男,现在选择女,在这时获取女)
      为单选按钮组设置id属性,以便在Java文件中获取这个单选按钮组:
      在这里插入图片描述
      在MainActivity.java文件中编写如下代码:
      在这里插入图片描述
      运行结果:
      在这里插入图片描述
    • 方法二:在点击其他按钮(如提交按钮)时获取
      先添加一个单击提交按钮,id为tj:
      在这里插入图片描述
      在MainActivity.java文件中添加如下代码:
package com.example.radiobuttondemo;

import androidx.appcompat.app.AppCompatActivity;

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

public class MainActivity extends AppCompatActivity {
    RadioGroup rg;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //在状态改变时获取:
        //通过id获取单选按钮组
        rg=findViewById(R.id.radiogroup);
        //添加选中状态改变的监听器,方法参数为一个匿名内部类
        rg.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(RadioGroup group, int checkedId) {
                //自动重写此方法,此方法有两个参数,第一个是当前单选按钮组;第二个是当前选中项的id
                //获取当前选中项的单选按钮
                RadioButton r=findViewById(checkedId);
                //添加一个消息提示框来显示获取到的信息
                Toast.makeText(MainActivity.this,"性别:"+r.getText(),Toast.LENGTH_LONG).show();
            }
        });

        //在点击提交按钮时获取:
        //通过id获取提交按钮
        Button tj=findViewById(R.id.tj);
        //为提交按钮添加单击事件监听器
        tj.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //通过一个for循环语句遍历单选按钮组,找到被选中的那个单选按钮
                //getChildCount()为获取当前组件的子组件的数量
                for(int i=0;i<rg.getChildCount();i++){
                    //获取当前的单选按钮
                    RadioButton r=(RadioButton) rg.getChildAt(i);
                    //判断获取到的单选按钮是否被选中
                    if (r.isChecked()){
                        //选中则显示内容
                        Toast.makeText(MainActivity.this,r.getText(),Toast.LENGTH_LONG).show();
                        //单选按钮组只有一个按钮可以被选中,如果执行到这一步,证明后面的按钮都没有被选中
                        //就可以不用再遍历判断,这样可以提高代码效率。
                        break;
                    }
                }
            }
        });
    }
}

注意:
在这里插入图片描述
在这里插入图片描述
运行结果:
因为上面的代码中两种方法的代码都有,所以运行结果会展示两种:
更改状态(点击保密单选按钮)时显示:
在这里插入图片描述
点击提交按钮时显示:
在这里插入图片描述

  1. 复选框CheckBox
  • 复选框:通常情况下显示为一个方块的图标,并且在图标旁有一些说明性的文字。与单选按钮不同的是:复选框支持多选设置,每个按钮都提供了选中状态和不选中状态。
    在这里插入图片描述
    在activity_main.xml文件中,用CheckBox标签来定义复选框:
    在这里插入图片描述

  • 属性:

    • android:text :在方框图标旁添加说明性文字。 在这里插入图片描述
    • android:checked :设置当前复选框默认选中。取值true默认选中。
      在这里插入图片描述
  • 添加多个复选框
    不需要像RadioButton那样用RadioGroup包裹,只需要直接添加多个复选框组件即可:
    在这里插入图片描述

  • 获取多个复选框中选中复选框的值:

    为每个复选框组件定义一个id,同时定义一个提交按钮组件:
    在这里插入图片描述
    然后在Java文件中编写以下代码:

package com.example.checkboxdemo;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.TableRow;
import android.widget.Toast;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {
    //定义提交按钮、复选框及保存复选框的List
    private Button button;
    private CheckBox checkBox1,checkBox2,checkBox3;
    private List<CheckBox> checkBoxList=new ArrayList<>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //初始化控件:
        button=findViewById(R.id.tj);
        checkBox1=findViewById(R.id.like1);
        checkBox2=findViewById(R.id.like2);
        checkBox3=findViewById(R.id.like3);
        //将复选框组件添加到list中
        checkBoxList.add(checkBox1);
        checkBoxList.add(checkBox2);
        checkBoxList.add(checkBox3);
        //为提交按钮设置单击按钮监控器
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //因为是多选,结果就可能是多个选项拼接,涉及到字符串拼接。
                //所以创建一个StringBuffer型字符串变量sb。
                StringBuffer sb=new StringBuffer();
                //遍历复选框List,判断每个复选框的状态
                for (CheckBox checkBox : checkBoxList) {
                    if(checkBox.isChecked()){
                        //如果当前复选框被选中,就将其结果拼接在sb上
                        sb.append(checkBox.getText().toString()+" ");
                    }
                }
                //判断字符串sb不为空,首先判断sb对象是否为null,不为null才判断其内容是否为空
                if(sb!=null &&"".equals(sb.toString())){
                    Toast.makeText(MainActivity.this,"请至少选择一个爱好",Toast.LENGTH_LONG).show();
                }else{
                    Toast.makeText(MainActivity.this,"您的爱好是:"+sb,Toast.LENGTH_LONG).show();
                }
            }
        });
    }
}

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

  • 为什么用StringBuffer而不用String?
    字符串拼接时,String直接创建一个新的对象,其内容为原对象的内容和需要拼接的内容拼在一起;StringBuffer是将需要拼接的内容拼接到当前对象的内容后。主要是因为String底层用final修饰,相当于常量,常量不可更改。
  • ==和equals:
    ==在判断对象时用于判断左右两边是否为同一个对象;equals判断对象的值是否相等。具体请看Java中equals和==的区别
发布了32 篇原创文章 · 获赞 10 · 访问量 5479

猜你喜欢

转载自blog.csdn.net/weixin_44480874/article/details/104223359