Android 之 RadioButton (单选按钮) Checkbox (复选框)

article/2025/8/25 12:29:29

本节引言:

本节给大家带来的是Andoird基本UI控件中的RadioButton和Checkbox; 先说下本节要讲解的内容是:RadioButton和Checkbox的
1.基本用法
2.事件处理;
3.自定义点击效果;
4.改变文字与选择框的相对位置;
5.修改文字与选择框的距离

其实这两个控件有很多地方都是类似的,除了单选和多选,事件处理,其他的都是类似的! 另外还有一个ListView上Checkbox的错位的问题,我们会在ListView那一章对这个问题进行 解决,好的,开始本节内容~ 本节官方文档API:RadioButton;CheckBox;


1.基本用法与事件处理:


1)RadioButton(单选按钮)

如题单选按钮,就是只能够选中一个,所以我们需要把RadioButton放到RadioGroup按钮组中,从而实现 单选功能!先熟悉下如何使用RadioButton,一个简单的性别选择的例子: 另外我们可以为外层RadioGroup设置orientation属性然后设置RadioButton的排列方式,是竖直还是水平~

效果图:

PS:笔者的手机是Android 5.0.1的,这里的RadioButton相比起旧版本的RadioButton,稍微好看一点~

布局代码如下:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:id="@+id/LinearLayout1"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"tools:context=".MainActivity" ><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="请选择性别"android:textSize="23dp"/><RadioGroupandroid:id="@+id/radioGroup"android:layout_width="wrap_content"android:layout_height="wrap_content"android:orientation="horizontal"><RadioButtonandroid:id="@+id/btnMan"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="男"android:checked="true"/><RadioButtonandroid:id="@+id/btnWoman"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="女"/></RadioGroup><Buttonandroid:id="@+id/btnpost"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="提交"/></LinearLayout>

获得选中的值:

这里有两种方法,

第一种是为RadioButton设置一个事件监听器setOnCheckChangeListener

例子代码如下:

RadioGroup radgroup = (RadioGroup) findViewById(R.id.radioGroup);//第一种获得单选按钮值的方法  //为radioGroup设置一个监听器:setOnCheckedChanged()  radgroup.setOnCheckedChangeListener(new OnCheckedChangeListener() {@Overridepublic void onCheckedChanged(RadioGroup group, int checkedId) {RadioButton radbtn = (RadioButton) findViewById(checkedId);Toast.makeText(getApplicationContext(), "按钮组值发生改变,你选了" + radbtn.getText(), Toast.LENGTH_LONG).show();}});

运行效果图: 

PS:另外有一点要切记,要为每个RadioButton添加一个id,不然单选功能会生效!!!

第二种方法是通过单击其他按钮获取选中单选按钮的值,当然我们也可以直接获取,这个看需求~

例子代码如下:

Button btnchange = (Button) findViewById(R.id.btnpost);RadioGroup radgroup = (RadioGroup) findViewById(R.id.radioGroup);//为radioGroup设置一个监听器:setOnCheckedChanged()  btnchange.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {for (int i = 0; i < radgroup.getChildCount(); i++) {RadioButton rd = (RadioButton) radgroup.getChildAt(i);if (rd.isChecked()) {Toast.makeText(getApplicationContext(), "点击提交按钮,获取你选择的是:" + rd.getText(), Toast.LENGTH_LONG).show();break;}}}});

运行效果图:

代码解析: 这里我们为提交按钮设置了一个setOnClickListener事件监听器,每次点击的话遍历一次RadioGroup判断哪个按钮被选中我们可以通过下述方法获得RadioButton的相关信息!

  • getChildCount( )获得按钮组中的单选按钮的数目;
  • getChinldAt(i):根据索引值获取我们的单选按钮
  • isChecked( ):判断按钮是否选中

2)CheckBox(复选框)

如题复选框,即可以同时选中多个选项,至于获得选中的值,同样有两种方式: 1.为每个CheckBox添加事件:setOnCheckedChangeListener 2.弄一个按钮,在点击后,对每个checkbox进行判断:isChecked();

运行效果图:

实现代码:

public class MainActivity extends AppCompatActivity implements View.OnClickListener,CompoundButton.OnCheckedChangeListener{private CheckBox cb_one;private CheckBox cb_two;private CheckBox cb_three;private Button btn_send;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);cb_one = (CheckBox) findViewById(R.id.cb_one);cb_two = (CheckBox) findViewById(R.id.cb_two);cb_three = (CheckBox) findViewById(R.id.cb_three);btn_send = (Button) findViewById(R.id.btn_send);cb_one.setOnCheckedChangeListener(this);cb_two.setOnCheckedChangeListener(this);cb_three.setOnCheckedChangeListener(this);btn_send.setOnClickListener(this);}@Overridepublic void onCheckedChanged(CompoundButton compoundButton, boolean b) {if(compoundButton.isChecked()) Toast.makeText(this,compoundButton.getText().toString(),Toast.LENGTH_SHORT).show();}@Overridepublic void onClick(View view) {String choose = "";if(cb_one.isChecked())choose += cb_one.getText().toString() + "";if(cb_two.isChecked())choose += cb_two.getText().toString() + "";if(cb_three.isChecked())choose += cb_three.getText().toString() + "";Toast.makeText(this,choose,Toast.LENGTH_SHORT).show();}
}

2.自定义点击效果

虽然5.0后的RadioButton和Checkbox都比旧版本稍微好看了点,但是对于我们来说 可能还是不喜欢或者需求,需要自己点击效果!实现起来很简单,先编写一个自定义 的selctor资源,设置选中与没选中时的切换图片~!

实现效果图如下:

PS:这里素材的原因,有点小...

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"><itemandroid:state_enabled="true"android:state_checked="true"android:drawable="@mipmap/ic_checkbox_checked"/><itemandroid:state_enabled="true"android:state_checked="false"android:drawable="@mipmap/ic_checkbox_normal" />
</selector>

写好后,我们有两种方法设置,也可以说一种吧!你看看就知道了~

①android:button属性设置为上述的selctor

android:button="@drawable/rad_btn_selctor"

②在style中定义一个属性,然后通过android style属性设置,先往style添加下述代码:

    <style name="MyCheckBox" parent="@android:style/Widget.CompoundButton.CheckBox"><item name="android:button">@drawable/rad_btn_selctor</item></style>

然后布局那里:

style="@style/MyCheckBox"

3.改变文字与选择框的相对位置

这个实现起来也很简单,还记得我们之前学TextView的时候用到的drawableXxx吗? 要控制选择框的位置,两部即可!设置:

Step 1. android:button="@null"
Step 2. android:drawableTop="@android:drawable/btn_radio"
当然我们可以把drawableXxx替换成自己喜欢的效果!


4.修改文字与选择框的距离

有时,我们可能需要调节文字与选择框之间的距离,让他们看起来稍微没那么挤,我们可以:
1.在XML代码中控制: 使用android:paddingXxx = "xxx" 来控制距离
2.在Java代码中,稍微好一点,动态计算paddingLeft!

示例代码如下:

rb.setButtonDrawable(R.drawable.rad_btn_selctor);
int rb_paddingLeft = getResources().getDrawable(R.mipmap.ic_checkbox_checked).getIntrinsicWidth()+5; 
rb.setPadding(rb_paddingLeft, 0, 0, 0);

http://chatgpt.dhexx.cn/article/amMp4pYL.shtml

相关文章

FTP服务器-vsftpd

FTP服务基础 FTP&#xff08;File Transfer Protocol,文件传输协议&#xff09;是典型的C/S结构的应用层协议&#xff0c;需要由服务端软件、客户端软件两个部分共同实现文件传输功能。 FTP连接及传输模式 FTP服务器默认使用TCP协议的20、21端口与客户端进行通信。 20端口用…

ftpvsftpd服务

一. ftp ftp即文件传输,它是INTERNET上仍然常用的最老的网络协议之一,它为系统提供了通过网络与远程服务器传输的简单方法,FTP服务器包的名称为vsftpd 二. 部署ftp服务 1. 安装ftp yum install -y vsftpd #安装vsftpd软…

VSFTPD服务器配置

文章目录 一、实验环境二、实验目的三、实验任务任务一&#xff1a;根据以下要求配置服务器1&#xff09; 配置FTP匿名用户的主目录为/var/ftp,该账户只能下载&#xff0c;不能上传。2&#xff09;建立一个名为abc、口令xyz的FTP账户&#xff0c;设置账户具有上传、下载权限。3…

ftpd服务常见配置总结(/etc/vsftpd/vsftpd.conf)

命令端口&#xff1a; listen_port21 注意&#xff1a;该信息默认没有&#xff0c;使用的话&#xff0c;需要用户自己添加。默认是21。 主动模式端口&#xff1a; connect_from_port_20YES 主动模式端口为20&#xff08;该项配置文件默认已经添加&#xff09; ftp_data_por…

Linux系统中vsftpd配置及如何添加vsFTPd用户和设置权限

vsftpd是一款在Linux发行版中最受推崇的FTP服务器程序。特点是小巧轻快&#xff0c;安全易用。 如果你想在你的Linux/Unix服务器上搭建一个安全、高性能、稳定性好的FTP 服务器&#xff0c;那么vsftpd可能是你的首选应用。vsftpd意思为“very secure FTP daemon(非常安全的FTP…

VSFTPD

首先&#xff0c;下载Metasploitable2-linux,在虚拟机点击文件&#xff0c;然后直接打开。 然后开启此虚拟机&#xff0c;默认用户名和密码都是msfadmin&#xff0c; 登录之后输入ifconfig查看靶机ip 打开kali&#xff0c;打开终端模拟器 输入sudo su&#xff0c;再输入用户密…

vsftp

一、概述 FTP是file Transfer Protocoll文件传输下ieyi&#xff0c;用于Internet上的文件的双向传输。因ftp是明文传输&#xff0c;没有受到保护&#xff0c;所以具有一定危险性。 VSFTP是一个基于GPL发布的类unix系统上使用的FTP服务器软件。为了解决ftp传输安全性问题的&…

vsftpd的使用

简介 vsftpd是 “very secure FTP deamon”的缩写&#xff0c;是一个完全免费&#xff0c;开源的ftp服务器软件。 特点 小巧轻快&#xff0c;安全易用&#xff0c;支持虚拟用户、支持带宽限制等功能。 安装 执行 yum -y install vsftpd 注&#xff1a;在安装前需提前确认是…

vsftpd使用指北

vsftpd使用指北 文章目录 vsftpd使用指北1.安装vsftpd2.登录3.切换本地路径下载命令&#xff1a;get用于下载单个文件&#xff1a;mget用于批量下载&#xff1a;上传命令&#xff1a; FilezillaReference vsftpd 是“very secure FTP daemon”的缩写&#xff0c;是一个完全免费…

linux安装vsftpd

linux安装vsftpd 安装vsftpd作为附件上传和下载服务 文章目录 linux安装vsftpd一、vsftpd是什么&#xff1f;二、使用步骤1.安装2.配置3.可能出现的问题第一种情况&#xff1a;selinux的ftp设置第二种情况&#xff1a;可能是防火墙的原因第三种情况&#xff1a;pam.d设置问题 …

1、vsftpd的简介

1、vsftpd的简介 vsftpd是“very secure TTP daemon”的缩写&#xff0c;是一个完全免费的、开放源代码的ftp服务器软件 2、特点 vsftpd是一款在Linux发行版中最受推崇的ftp服务器程序&#xff0c;小巧轻快&#xff0c;安全易用&#xff0c;支持虚拟用户&#xff0c;支持带宽…

vsftpd基本使用

ftp: 文件传输协议 两类连接&#xff1a; 命令连接&#xff1a;传输命令 数据连接&#xff1a;传输数据 两种模式&#xff1a; 主动模式&#xff1a;PORT 20/tcp连接客户端的命令连接使用的端口向后的第一个可用端口 被动模式&#xff1a;PASV 打开一个随机端口&#xff0c;并…

vsftpd部署流程和常见问题详解

vsftpd部署流程和常见问题详解 ⭐️ 网上关于在云服务器里配置vsftpd的文章鱼龙混杂&#xff0c;没有一篇是可以彻底解决问题的&#xff0c;有些问题虽简单&#xff0c;但也让初学者感到困惑。本文详细说明vsftpd的部署流程和一些常见问题的解决方法&#xff0c;详述用户创建过…

Linux vsFTPd服务详解——vsFTPd基础知识

今天继续给大家介绍Linux运维相关内容&#xff0c;本文主要内容是Linux的vsFTPd服务。 一、vsFTPd服务简介与安装 FTP服务&#xff0c;即File Transfer Protocol、文件传输服务&#xff0c;用于在互联网上提供文件存储和访问服务。有关FTP的原理请参见以下文章&#xff1a;FT…

vsftpd的安装和使用

目录 1、vsftpd的简介... 2 2、特点... 2 3、安装... 2 4、创建虚拟用户... 2 5、vsftpd服务器的配置... 4 6、vsftpd配置文件说明... 7 7、防火墙的配置... 8 8、vsftpd的验证... 9 9、vsftpd的常用命令... 10 10、反复需要验证ftp身份问题解决... 10 1、vsftpd的简…

Number、parseInt和parseFloat的区别

1、Number() 可以把任何类型的数据转换为数值或NaN(not a number)&#xff0c;parseInt()和parseFloat()只能把字符串或数值转换为数值&#xff1b; 2、Number()和parseFloat()会有效解析浮点数&#xff08;如"324.11abc"转为324.11&#xff09;&#xff0c;而parse…

parseFloat()函数的使用

定义&#xff1a; parseFloat() 函数可解析一个字符串&#xff0c;并返回一个浮点数。该函数指定字符串中的首个字符是否是数字。如果是&#xff0c;则对字符串进行解析&#xff0c;直到到达数字的末端为止&#xff0c;然后以数字返回该数字&#xff0c;而不是作为字符串。 语…

Float.parseFloat()的作用

parseFloat()方法用于返回与给定String表示形式相对应的float值 类型转换: string转float

java float.parsefloat_java.lang.Float.parseFloat()方法实例

全屏 java.lang.Float.parseFloat()方法返回一个为指定String表示新的浮点初始化值&#xff0c;由Float类的valueOf方法执行的值。 声明 以下是java.lang.Float.parseFloat()方法的声明public static float parseFloat(String s) throws NumberFormatException 参数s -- 这是要…

从ES规范和引擎细谈 js 中 parseInt 和 parseFloat 的执行机制

从ES规范和引擎细谈 js 中 parseInt 和 parseFloat 的执行机制 parseInt()和parseFloat()这两个常用 API 其实还是有很多“坑”的&#xff0c;以此文统一梳理一下。&#xff08;本文比较适合常与数字打交道的 jser 或对这两 API 运作感兴趣的同学&#xff09; &#xff08;git…