RadioButton单选框和CheckBox复选框

RadioButton和RadioGroup

RadioButton是单选按钮,但是一般不会单独使用(就一项还选个毛),所以一般会成组出现,那么这几个选项按钮就会放在RadioGroup里作为一组,这样才能实现选一个的效果。

常用属性

  • RadioGroup:orientation 子选项的布局方式,horizontal(横向)或者vertical(纵向)
  • RadioButton:
    • checked:true表示默认选中
    • text:文本内容
    • textSize
    • textColor
    • button:按钮样式,@null表示去掉样式(没有小圆圈,只有text内容)
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".RadioButtonActivity">
    <RadioGroup
        android:id="@+id/radio_group1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal">
        <RadioButton
            android:id="@+id/radio_btn1"
            android:checked="true"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text=""
            android:textSize="18sp"
            android:textColor="#00f"/>
        <RadioButton
            android:id="@+id/radio_btn2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@+id/radio_btn1"
            android:text=""
            android:textSize="18sp"
            android:textColor="#00f"/>
    </RadioGroup>
    <RadioGroup
        android:id="@+id/radio_group2"
        android:layout_below="@id/radio_group1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="50dp"
        android:orientation="vertical">
        <RadioButton
            android:id="@+id/radio_btn3"
            android:checked="true"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:button="@null"
            android:background="@drawable/radio_btn_bg"
            android:text=""
            android:textSize="18sp"
            android:textColor="#fff"/>
        <RadioButton
            android:id="@+id/radio_btn4"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@+id/radio_btn3"
            android:button="@null"
            android:background="@drawable/radio_btn_bg"
            android:text=""
            android:textSize="18sp"
            android:textColor="#fff"/>
    </RadioGroup>
</RelativeLayout>

自定义样式

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_checked="false">
        <shape android:shape="rectangle">
            <corners android:radius="10dp"/>
            <stroke android:color="#f0f"
                android:width="1dp"/>
        </shape>
    </item>
    <item android:state_checked="true">
        <shape android:shape="rectangle">
            <corners android:radius="10dp"/>
            <solid android:color="#f0f"/>
        </shape>
    </item>
</selector>

监听事件

OnCheckedChangeListener() 选择状态改变事件监听器

package com.example.test;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.util.Log;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.Toast;

public class RadioButtonActivity extends AppCompatActivity {
    private RadioGroup rg;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_radio_button);
        rg = findViewById(R.id.radio_group1);
        //注意监听的是radioGroup而不是里面的选项
        rg.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(RadioGroup radioGroup, int i) {
                Log.d("i", String.valueOf(i));
                //通过id获得对应的radioButton,这个方法传进来的参数i就是选中选项的id
                RadioButton rb = findViewById(i);
                Log.d("当前选择项的内容",rb.getText().toString());
                String msg = rb.getText().toString().equals("男")? "欢迎小哥哥":"欢迎小姐姐";
                Toast.makeText(RadioButtonActivity.this,msg,Toast.LENGTH_SHORT).show();
            }
        });
    }
}

CheckBox复选框

checkbox和radiobutton的一个区别是前者不需要分组,后者同一类必须放到RadioGroup里作为一组

常用属性

常用属性和单选一样

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:padding="10dp"
    android:background="#AAAAFF"
    tools:context=".CheckBoxActivity">
    <TextView
        android:id="@+id/cb_title"
        android:text="介绍一下你自己"
        android:textSize="30sp"
        android:layout_marginTop="10dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
    <CheckBox
        android:id="@+id/cb1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text=""
        android:textSize="20sp"/>
    <CheckBox
        android:id="@+id/cb2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text=""
        android:textSize="20sp"/>
    <CheckBox
        android:id="@+id/cb3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="rap"
        android:textSize="20sp"/>
    <CheckBox
        android:id="@+id/cb4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="篮球"
        android:button="@null"
        android:drawableLeft="@drawable/check_box_bg"
        android:textSize="20sp"/>
    <LinearLayout
        android:id="@+id/ck2"
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="有什么特长?"
            android:textSize="30sp"
            android:layout_marginTop="20dp"/>
        <CheckBox
            android:id="@+id/cb5"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="头发特长"
            android:button="@drawable/check_box_bg"
            android:textSize="20sp"/>
        <CheckBox
            android:id="@+id/cb6"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:button="@drawable/check_box_bg"
            android:text="腿特长"
            android:textSize="20sp"/>
    </LinearLayout>
</LinearLayout>

自定义样式

这里强调一下修改选中和未选中的图标样式的方法:

  • 第一种:
    1.在xml文件中定义选中和未选中对应的图片文件
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
   <item android:state_checked="true" android:drawable="@drawable/checked"/>
   <item android:state_checked="false" android:drawable="@drawable/nochecked"/>
</selector>
  1. 在对应的复选框选项属性中添加 android:button="@drawable/check_box_bg"
  • 第二种:
  1. 在xml文件中定义选中和未选中对应的图片文件
  2. 在选项属性中设置android:button="@null"
  3. 在选项属性中设置android:drawableLeft="@drawable/check_box_bg"

需要注意的是,这两种方法里都用到的是button属性,而不是background

监听事件

setOnCheckedChangeListener();

注意:复选框和单选框的选中状态监听事件里重写的方法中参数是不一样的,单选框传进的参数是选中选项的id,而复选框传进的参数是布尔值,表示选中或者未选中。

package com.example.test;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.Toast;

public class CheckBoxActivity extends AppCompatActivity {
    private CheckBox cb5,cb6;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_check_box);
        cb5 = findViewById(R.id.cb5);
        cb6 = findViewById(R.id.cb6);
        cb5.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
                //参数b表示选中或者未选中
                Toast.makeText(CheckBoxActivity.this,b?"5选中":"5未选中",Toast.LENGTH_SHORT).show();
            }
        });
        cb6.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
                Toast.makeText(CheckBoxActivity.this,b?"6checked":"6notChecked",Toast.LENGTH_SHORT).show();
            }
        });
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值