Android实现RadioGroup之间的互斥

article/2025/9/22 1:13:14

Android实现RadioGroup之间的互斥

  • 关于
  • 效果图
  • 实现
    • 准备工作,附上布局代码
    • 解决需求,附上类代码

关于

  因为一个页面需求,需要有两个radio group共六个radio button来实现单选互斥(为什么不用一个radio group来包裹是因为需要两行展示)

效果图

在这里插入图片描述

实现

准备工作,附上布局代码

  首先修改activity_radio_group.xml文件:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".RadioGroupActivity"><RadioGroupandroid:id="@+id/rgFlowSwitch"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginTop="16dp"android:foreground="?android:attr/selectableItemBackground"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="parent"android:orientation="horizontal"><RadioButtonandroid:id="@+id/tvSwitchFace"android:layout_width="64dp"android:layout_height="68dp"android:background="@drawable/selector_air_flow"android:gravity="center"android:layout_weight="1"android:layout_marginStart="48dp"android:button="@null"/><RadioButtonandroid:id="@+id/tvSwitchFaceFeet"android:layout_width="64dp"android:layout_height="68dp"android:background="@drawable/selector_air_flow"android:checked="false"android:layout_marginStart="48dp"android:button="@null"android:layout_weight="1"android:gravity="center"/><RadioButtonandroid:id="@+id/tvSwitchBalance"android:layout_width="64dp"android:layout_height="68dp"android:layout_marginStart="48dp"android:background="@drawable/selector_air_flow"android:checked="false"android:layout_marginEnd="39dp"android:layout_weight="1"android:button="@null"android:gravity="center"/></RadioGroup><RadioGroupandroid:id="@+id/rgFlowTwoSwitch"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginTop="16dp"android:foreground="?android:attr/selectableItemBackground"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toBottomOf="@+id/rgFlowSwitch"android:orientation="horizontal"><RadioButtonandroid:id="@+id/tvSwitchFeet"android:layout_width="64dp"android:layout_height="68dp"android:background="@drawable/selector_air_flow"android:checked="false"android:layout_marginStart="48dp"android:button="@null"android:layout_weight="1"android:gravity="center"/><RadioButtonandroid:id="@+id/tvSwitchFeetWindow"android:layout_width="64dp"android:layout_height="68dp"android:background="@drawable/selector_air_flow"android:checked="false"android:layout_marginStart="48dp"android:button="@null"android:layout_weight="1"android:gravity="center"/><RadioButtonandroid:id="@+id/tvSwitchWindow"android:layout_width="64dp"android:layout_height="68dp"android:background="@drawable/selector_air_flow"android:checked="false"android:layout_marginStart="48dp"android:layout_marginEnd="39dp"android:button="@null"android:layout_weight="1"android:gravity="center"/></RadioGroup></androidx.constraintlayout.widget.ConstraintLayout>

  贴一下对应radio button的背景selector_air_flow.xml:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"><item android:drawable="@drawable/bg_air_flow_circle_blue_full" android:state_checked="true" /><item android:drawable="@drawable/bg_radio_circle_gray_03" android:state_checked="false" />
</selector>

  再贴一下对应bg_air_flow_circle_blue_full.xml:

<?xml version="1.0" encoding="utf-8"?>
<shape android:shape="oval"xmlns:android="http://schemas.android.com/apk/res/android"><solid android:color="#0099ff" /><corners android:radius="3dp" /><sizeandroid:width="40dp"android:height="40dp" /><paddingandroid:bottom="7dp"android:left="7dp"android:right="7dp"android:top="7dp" />
</shape>

  最后贴一下bg_radio_circle_gray_03.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"android:shape="oval"><corners android:radius="3dp" /><solidandroid:color="@color/transparent"/><sizeandroid:width="40dp"android:height="40dp" /><paddingandroid:bottom="7dp"android:left="7dp"android:right="7dp"android:top="7dp" /><strokeandroid:width="0.6dp"android:color="@color/black"/>
</shape>

  好了,准备工作完成

解决需求,附上类代码

 private lateinit var viewBinding: ActivityRadioGroupBindingoverride fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)viewBinding = ActivityRadioGroupBinding.inflate(layoutInflater)setContentView(viewBinding.root)viewBinding.rgFlowSwitch.setOnCheckedChangeListener { group, checkedId ->when(checkedId){//check(-1)表示选择null,方法等价.clearCheck()R.id.tvSwitchFace -> viewBinding.rgFlowTwoSwitch.check(-1)R.id.tvSwitchFaceFeet -> viewBinding.rgFlowTwoSwitch.check(-1)R.id.tvSwitchBalance -> viewBinding.rgFlowTwoSwitch.check(-1)}}viewBinding.tvSwitchFeet.setOnCheckedChangeListener { _, isChecked ->if (isChecked) viewBinding.rgFlowSwitch.check(-1)}viewBinding.tvSwitchFeetWindow.setOnCheckedChangeListener { _, isChecked ->if (isChecked) viewBinding.rgFlowSwitch.check(-1)}viewBinding.tvSwitchWindow.setOnCheckedChangeListener { _, isChecked ->if (isChecked) viewBinding.rgFlowSwitch.check(-1)}//因为group的OnCheckedChange会监听子button的状态变化,所以也会服用导致死循环,所以两个group的checked监听不可,超过两个以上的radiogroup就要采用group的onchecked监听+其余group的radiobutton的onchecked监听/* viewBinding.rgFlowTwoSwitch.setOnCheckedChangeListener { group, checkedId ->if (group.checkedRadioButtonId !=-1){when(checkedId){R.id.tvSwitchFeet -> viewBinding.rgFlowSwitch.check(-1)R.id.tvSwitchWindow -> viewBinding.rgFlowSwitch.check(-1)R.id.tvSwitchFeetWindow -> viewBinding.rgFlowSwitch.check(-1)}}}*/}

  本篇用来记录解决问题的过程,很多测试探索的步骤就不在这里展示,有问题欢迎批评指正,觉得不错的也请点个赞,多谢
  进阶篇《Android实现RadioGroup之间的互斥且radioButton可以选择或取消》


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

相关文章

网格RadioGroup实现

RadioGroup只能横向和垂直展示RadioButton&#xff0c;然后设计师们就经常要求我们网格展示。比如要实现如下的效果&#xff1a; 那要怎么做呢&#xff0c;采用继承RadioGroup&#xff0c;重新绘制里面的内容&#xff0c;上代码&#xff1a; 定义所需属性 attrs&#xff1a;…

RadioGroup 使用

xml //布局 <RadioGroupandroid:id"id/rb"android:layout_width"match_parent"android:layout_height"44dp"android:orientation"horizontal"><RadioButtonandroid:id"id/rb_start"android:layout_width"0dp…

radiogroup多选_3.Android之单选按钮RadioGroup和复选框Checkbox学习

单选按钮和复选框在实际中经常看到&#xff0c;今天就简单梳理下。 首先&#xff0c;我们在工具中拖进单选按钮RadioGroup和复选框Checkbox&#xff0c;如图&#xff1a; xml对应的源码&#xff1a; android:layout_width"match_parent" android:layout_height"…

java radiogroup_android 菜单导航 (Fragment + RadioGroup)

网上有很多讲利用Fragment RadioGroup&#xff0c;actionbar viewPager和TabHost做菜单导航和切换的例子。对于第三种现在已经过时了。所以讲讲自己对第一个的理解和经验分享&#xff0c;不过在此也简单说说第二种。 1、actionbar viewpager 对于这种方式&#xff0c;其实在…

java radiogroup_Android基础控件RadioGroup使用方法详解

本文为大家分享了Android基础控件RadioGroup的使用&#xff0c;供大家参考&#xff0c;具体内容如下 1.简单介绍 RadioGroup可以提供几个选项供用户选择&#xff0c;但只能选择其中的一个。其下面可以横着或者竖着挂几个RadioButton&#xff0c;也可以挂载其他控件(如TextView)…

android自定义radiogroup,Android自定义RadioGroup

最近做项目时需要用到RadioGroup&#xff0c;发现Android原生的RadioGroup太丑了&#xff0c;所以自己写了一个&#xff0c;效果如下所示&#xff1a; 其实就是由4个Button组成的LinearLayout&#xff0c;只是为了方便点击效果的切换所以封装了一下。代码如下&#xff1a; pack…

RadioGroup

实现RadioButton由两部分组成,也就是RadioButton和RadioGroup配合使用.RadioGroup是单选组合框&#xff0c;可以容纳多个RadioButton的容器.在没有RadioGroup的情况下&#xff0c;RadioButton可以全部都选中&#xff1b;当多个RadioButton被RadioGroup包含的情况下&#xff0c;…

Android入门之路 - RadioGroup、RadioButton、CheckBox(单复选框)使用进阶

本文只为初级的Android新手而写&#xff0c;多掌握一份简单实用的技能&#xff0c;快速get吧&#xff0c;有问题就留言 2022&#xff1a;蓦然回首&#xff0c;已入行多年&#xff0c;人生的第二个迷茫阶段 初级 - 使用方式RadioGroup RadioButtonCheckBoxDemo示例 CheckBox 自…

Android RadioGroup 单选按钮控件

Android RadioGroup 单选按钮控件 RadioGroup 为单项选择按钮组&#xff0c;其中可以包含多个 RadioButton&#xff0c;即单选按钮&#xff0c;它们共同为用户提供一种多选一的选择方式。在多个 RadioButton 被同一个 RadioGroup 包含的情况下&#xff0c;多个 RadioButton 之间…

RadioGroup控件使用

在只能进行单选的选择上面可以通过&#xff32;adioGroup控件来实现&#xff0c;例如性别选择以及考试的单项选择题。 xml布局如下&#xff1a; <?xml version"1.0" encoding"utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xm…

RedHat9.0下载地址

RedHat下载&#xff1a;http://archive.download.redhat.com/pub/redhat/linux/9/en/iso/i386/ 转载于:https://www.cnblogs.com/XACOOL/p/5679613.html

下载redhat4.8的方法

一、背景 因为老软件需要安装&#xff0c;所以找个了老系统来安装。 二、上官网 https://www.redhat.com/zh/ 点开redhat最新版本&#xff0c;现在是8.0 下载 要求我登录账户&#xff0c;我就登录jhui163的 然后&#xff0c;看到7.0和更早期的超链接&#xff0c;点进去

vmware安装redhat 8

vmware安装redhat 8 1、下载镜像文件1.1 镜像文件 2、安装系统2.1、选择自定义安装2.2、兼容性选择2.3、选择镜像文件导入2.4、设置用户名密码2.5、选择虚拟机在磁盘上的位置2.6、选择处理器数量2.7、选择内存大小2.8、选择桥接或NAT2.9、选择SCSI控制器类型2.10、选择虚拟机磁…

RedHat 7.5 7.6下载磁力链分享

某度最近更新了一波&#xff0c;导致诸多屏蔽弹客户端应用直接显示直链下载的浏览器插件也失效&#xff0c;就连最强的下载神器也400、403报错 csdn的下载站里是有不少资源&#xff0c;但是苦于都要积分&#xff0c;出于服务大众、便利人民的心。 我终于找到了对应的下载磁力…

RedHat使用yum下载安装软件包

RedHat使用yum下载安装软件包 Red Hat Enterprise Linux Server&#xff08;RHEL&#xff09;的yum服务是收费的&#xff0c;如果没有付费&#xff0c;则无法使用yum安装软件包。通过删除RedHat自带的yum&#xff0c;安装CentOS版本的yum&#xff0c;并使用CentOS的yum源和epel…

RedHat红帽RHEL7.2镜像下载以及安装教程(内含下载链接)

RedHat红帽RHEL7.2镜像下载以及安装教程 镜像下载链接&#xff1a; https://pan.baidu.com/s/1czcz-ClYavcugE9PJDIIQg?pwdq2t1 提取码:q2t1 安装教程 1、打开VM&#xff0c;新建虚拟机 2、选择自定义&#xff0c;下一步 3、默认&#xff0c;下一步 4、选择稍后安装操作系统…

redhat官方文档下载方法

打开地址&#xff1a;https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/ 如图下载pdf格式文件&#xff1a;

安装Redhat

1.新建虚拟机&#xff0c;选典型 2.下一步&#xff0c;选择稍后安装操作系统 3.下一步&#xff0c;选择Linux&#xff0c;版本选择Red Hat Enterprise 8&#xff08;版本是什么就选择什么&#xff09; 4.下一步&#xff0c;设置虚拟机名称以及位置 5.下一步&#xff0c;设…

红帽linux6.8镜像下载,redhat8镜像下载

https://developers.redhat.com/rhel8 点击下图的“Download RHEL” 点击完 “Download RHEL”后会跳转到登录界面&#xff0c;注册个账号登录即可&#xff0c;该文档将跳过注册步骤 截止该文档下载时&#xff0c;redhat8的版本为8.3 beat版本&#xff0c;点击“View Older Dow…

redhat下载gcc

redhat似乎受众很少&#xff0c;安装gcc很少有参照。 倒腾很久终于安装成功了&#xff0c;浅浅记录一下。 1、首先将创建一个gcc文件夹&#xff0c;将gcc挂载到/dev/sr0下 2、然后进入繁琐的安装过程。 &#xff08;大抵是需要这些包了&#xff0c;但是不同rhel可能版本号不同…