Android原生实现单选

         六年前写的一个控件,一直没有时间总结,趁年底不怎么忙,整理一下之前写过的组件。供大家一起参考学习。废话不多说,先上图。

一、效果图

实现思路使用的是radioGroup加radiobutton组合方式。原理就是通过修改RadioButton 的background样式实现,radioGroup嵌套radiobutton已经实现单选互斥,故直接监听其选中监听处理数据就好。

dp_0.5:就是0.5dp的意思,自行替换成自己的值。

dp_15:代表15dp
 

二、布局代码

  方案:采用的是RadioGroup嵌套RadioButton的方式。

  <RadioGroup
            android:id="@+id/rg_gender"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@id/monitor_remd"
            android:layout_marginLeft="@dimen/dp_24"
            android:layout_marginTop="@dimen/dp_10"
            android:orientation="horizontal"
            android:padding="1dp">

            <RadioButton
                android:id="@+id/rb_press_h"
                android:layout_width="wrap_content"
                android:layout_height="@dimen/dp_25"
                android:button="@null"
                android:checked="true"
                android:drawableLeft="@drawable/checked_manage"
                android:drawablePadding="5dp"
                android:text="高压"
                android:textColor="@color/white"
                android:textSize="@dimen/sp_11" />

            <RadioButton
                android:id="@+id/rb_press_l"
                android:layout_width="wrap_content"
                android:layout_height="@dimen/dp_30"
                android:layout_marginLeft="10dp"
                android:button="@null"
                android:drawableLeft="@drawable/checked_manage"
                android:drawablePadding="5dp"
                android:text="低压"
                android:textColor="@color/white"
                android:textSize="@dimen/sp_11" />

            <RadioButton
                android:id="@+id/rb_press_rate"
                android:layout_width="wrap_content"
                android:layout_height="@dimen/dp_30"
                android:layout_marginLeft="10dp"
                android:button="@null"
                android:drawableLeft="@drawable/checked_manage"
                android:drawablePadding="5dp"
                android:text="心率"
                android:textColor="@color/white"
                android:textSize="@dimen/sp_11" />
        </RadioGroup>

三、样式代码

  3.1 android:drawableLeft="@drawable/checked_manage"样式

   这种方式使用的是drawableLeft方式,没使用background。

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

3.1.1 press_check样式svg方式实现

<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:width="10dp"
    android:height="10dp"
    android:viewportWidth="1024"
    android:viewportHeight="1024">
  <path
      android:pathData="M511.2,63.9c-246.3,0 -447.8,201.5 -447.8,447.8s201.5,447.8 447.8,447.8C757.5,959.6 959,758 959,511.7S757.5,63.9 511.2,63.9zM868.5,662.1c-19.6,46.2 -47.7,87.7 -83.4,123.4s-77.3,63.8 -123.4,83.4c-47.7,20.3 -98.3,30.6 -150.4,30.6 -52.1,0 -102.7,-10.3 -150.4,-30.6 -46.2,-19.6 -87.7,-47.7 -123.4,-83.4s-63.8,-77.3 -83.4,-123.4c-20.3,-47.7 -30.6,-98.3 -30.6,-150.4 0,-52.1 10.3,-102.7 30.6,-150.4 19.6,-46.2 47.7,-87.7 83.4,-123.4s77.3,-63.8 123.4,-83.4c47.7,-20.3 98.3,-30.6 150.4,-30.6 52.1,0 102.7,10.3 150.4,30.6 46.2,19.6 87.7,47.7 123.4,83.4s63.8,77.3 83.4,123.4C888.7,409 899,459.6 899,511.7c0,52.1 -10.3,102.7 -30.5,150.4z"
      android:fillColor="#2775DE"/>
  <path
      android:pathData="M511.2,511.7m-170,0a170,170 0,1 0,340 0,170 170,0 1,0 -340,0Z"
      android:fillColor="#2775DE"/>
</vector>

 3.1.2 nomar_check样式

<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:width="10dp"
    android:height="10dp"
    android:viewportWidth="1024"
    android:viewportHeight="1024">
  <path
      android:pathData="M512,182.9c-181.8,0 -329.1,147.4 -329.1,329.1 0,181.8 147.4,329.1 329.1,329.1 181.8,0 329.1,-147.4 329.1,-329.1C841.1,330.2 693.8,182.9 512,182.9zM512,786.3c-151.5,0 -274.3,-122.8 -274.3,-274.3 0,-151.5 122.8,-274.3 274.3,-274.3s274.3,122.8 274.3,274.3C786.3,663.5 663.5,786.3 512,786.3z"
      android:fillColor="#ffffff"/>
</vector>

3.2 checked_manage样式

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

3.2.1 press_check样式

<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:width="10dp"
    android:height="10dp"
    android:viewportWidth="1024"
    android:viewportHeight="1024">
  <path
      android:pathData="M511.2,63.9c-246.3,0 -447.8,201.5 -447.8,447.8s201.5,447.8 447.8,447.8C757.5,959.6 959,758 959,511.7S757.5,63.9 511.2,63.9zM868.5,662.1c-19.6,46.2 -47.7,87.7 -83.4,123.4s-77.3,63.8 -123.4,83.4c-47.7,20.3 -98.3,30.6 -150.4,30.6 -52.1,0 -102.7,-10.3 -150.4,-30.6 -46.2,-19.6 -87.7,-47.7 -123.4,-83.4s-63.8,-77.3 -83.4,-123.4c-20.3,-47.7 -30.6,-98.3 -30.6,-150.4 0,-52.1 10.3,-102.7 30.6,-150.4 19.6,-46.2 47.7,-87.7 83.4,-123.4s77.3,-63.8 123.4,-83.4c47.7,-20.3 98.3,-30.6 150.4,-30.6 52.1,0 102.7,10.3 150.4,30.6 46.2,19.6 87.7,47.7 123.4,83.4s63.8,77.3 83.4,123.4C888.7,409 899,459.6 899,511.7c0,52.1 -10.3,102.7 -30.5,150.4z"
      android:fillColor="#2775DE"/>
  <path
      android:pathData="M511.2,511.7m-170,0a170,170 0,1 0,340 0,170 170,0 1,0 -340,0Z"
      android:fillColor="#2775DE"/>
</vector>

3.2.2 nomar_check样式

<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:width="10dp"
    android:height="10dp"
    android:viewportWidth="1024"
    android:viewportHeight="1024">
  <path
      android:pathData="M512,182.9c-181.8,0 -329.1,147.4 -329.1,329.1 0,181.8 147.4,329.1 329.1,329.1 181.8,0 329.1,-147.4 329.1,-329.1C841.1,330.2 693.8,182.9 512,182.9zM512,786.3c-151.5,0 -274.3,-122.8 -274.3,-274.3 0,-151.5 122.8,-274.3 274.3,-274.3s274.3,122.8 274.3,274.3C786.3,663.5 663.5,786.3 512,786.3z"
      android:fillColor="#ffffff"/>
</vector>

3.3 checked_manage样式

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

四 java代码

     由于使用了databinding双向绑定,故就不演示findviewbyid,如果没有使用databinding,

//高压、低压、心率选择处理
mDataBinding.rgGender.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
    @Override
    public void onCheckedChanged(RadioGroup radioGroup, int checkedId) {
        switch (checkedId) {
            case R.id.rb_press_h:
                Log.d("RadioGroup", "===高压===");
                break;
            case R.id.rb_press_l:
                Log.d("RadioGroup", "===低压===");
                break;
            case R.id.rb_press_rate:
                Log.d("RadioGroup", "===心率===");
                break;
        }
    }
});

五 给予新手的寄语

     对于新手来讲,开发总会遇到各种各样的问题,逐个解决就好,注意沟通协调。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/273308.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

双向循环链表实现C语言关键字中英翻译机 ฅ( ̳• · • ̳ฅ)

目录 1.双向循环链表的声明与定义&#xff1a; 2. 创建链表并对节点中的数据赋初值 3. 插入节点并链接 4.中英翻译 5. 小游戏的实现 6.菜单的实现 7. 释放内存 8.在主函数中用刚才定义的函数实现各种代码 输入样例&#xff1a; 实现方法&#xff1a;双向循环链表来实…

7.7、kali linux环境下搭建DVWA

目录 一、资料下载准备工作 1.1、DVWA源代码下载 二、开启Apache、mysql服务 2.1、下载Apache2文件 2.2、开启Apache2服务 方法一&#xff1a;开启Apache2服务&#xff08;手动&#xff09; 方法二&#xff1a;开启Apache2服务&#xff08;系统自启动&#xff09; 2.3、…

基于springboot超市进销存系统

**&#x1f345;点赞收藏关注 → 私信领取本源代码、数据库&#x1f345; 本人在Java毕业设计领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目希望你能有所收获&#xff0c;少走一些弯路。&#x1f345;关注我不迷路&#x1f345;**摘要 随着信息化时代的到来&…

【数字孪生】数字工厂三维可视化大屏,智慧养殖三维可视化大屏,智慧农田三维可视化大屏,智慧运维三维可视化大屏,三维在线展示

个人主页&#xff1a; 左本Web3D&#xff0c;更多案例预览请点击》 在线案例 个人简介&#xff1a;专注Web3D使用ThreeJS实现3D效果技巧和学习案例 &#x1f495; &#x1f495;积跬步以至千里&#xff0c;致敬每个爱学习的你。喜欢的话请三连&#xff0c;有问题请私信或者加微…

通过MobaXterm远程连接Anolis

目录 前言&#xff1a; 一.设置ip 二.远程连接 前言&#xff1a; 小编已经阐述了如何安装Anolis系统&#xff0c;如果有不了解的小伙伴可以查看这一篇博客Anolis安装 这篇博客将会讲述如何远程连接Anolis系统。各位看官拿好板凳&#xff01; 一.设置ip 打开网卡所在位…

logstash收集华为、H3C、Cisco交换机日志

网络设备配置 将 syslog-ip 替换成服务器的IP地址。 Huawei info-center loghost source interface info-center loghost syslog-ip local-time facility local6 H3C info-center loghost source interface info-center loghost syslog-ip facility local5 Aruba logging arm …

Xcode 编译速度慢是什么原因?如何提高编译速度?

作为一个开发者&#xff0c;我们都希望能够高效地开发应用程序&#xff0c;而编译速度是影响开发效率的重要因素之一。然而&#xff0c;有时候我们会发现在使用 Xcode 进行开发时&#xff0c;译速度非常慢&#xff0c;这给我们带来了不少困扰。那么&#xff0c;为什么 Xcode 的…

用Ai制作一个镭射图标

下面来展示画一个镭射图标 1、首先画一个星型形状&#xff0c;然后去除描边&#xff0c;并施加渐变中的色谱 注意按住ctrl键拖动角点就可以改变尖角为圆角 按住ctrl键单击某一个角可得到某个角的圆角 选择渐变格式 径向渐变编辑渐变 把每个渐变颜色的饱和度S减半&#xff0c;…

Qt 中使用 MySQL 数据库保姆级教程(上)

作者&#xff1a;billy 版权声明&#xff1a;著作权归作者所有&#xff0c;商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处 前言 在 Qt 中默认只搭载了 QSqlLite 数据库驱动&#xff0c;若要使用其他数据库需要自己下载数据库&#xff0c;并将数据库驱动加载到…

MySql 中的聚簇索引、非聚簇索引、唯一索引和联合索引

目录 一. 前言 二. 聚簇索引和非聚簇索引 三. 覆盖索引 四. 联合索引 4.1. 原理讲解 4.2. 最左前缀匹配原则 4.3. 索引下推 五. 唯一索引 一. 前言 索引根据底层实现可分为 B-Tree 索引和哈希索引&#xff0c;大部分时候我们使用的都是 B-Tree 索引&#xff0c;因为它良…

【MySQL】InnoDB和MyISAM区别

文章目录 一、索引不同1 InnoDB聚簇索引&#xff0c;MyISAM非聚簇索引1 InnoDB聚簇索引2 MyISAM非聚簇索引 2 InnoDB必须要有主键&#xff0c;MyISAM允许没有主键3 InnoDB支持外键4 InnoDB不支持全文索引5 索引保存位置不同 二、对事物的支持三、存储结构不同四、存储空间不同五…

中国林业和草原统计年鉴数据,2001-2019年,可看示例数据

基本信息 数据名称: 中国林业和草原统计年鉴 数据格式: 其他 数据时间: 2001-2019年 数据坐标系: WGS84 数据来源&#xff1a;网络公开数据 原名为《中国林业统计年鉴》2020年后更名为《中国林业和草原统计年鉴》&#xff1b;数据中可能包含Excel表格、PDF文档之中的一…

Socks5代理IP在跨境电商与游戏中的应用

随着互联网的迅猛发展&#xff0c;网络已经成为人们日常生活不可或缺的一部分。在这个数字化时代&#xff0c;跨境电商和网络游戏产业蓬勃发展&#xff0c;但伴随而来的是网络安全的威胁与挑战。本文将介绍Socks5代理IP技术&#xff0c;探讨它在网络安全、跨境电商以及游戏中的…

【Linux学习笔记】Linux下nginx环境搭建

1、下载nginx 安装rpm命令: rpm ivh nginx-release.rpm。(直接使用linux命令下载wget http://nginx.org/packages/rhel/6/noarch/RPMS/nginx-release-rhel-6-0.el6.ngx.noarch.rpm 2、设置nginx开机启动 chkconfig nginx on 3、开启nginx服务 方法一&#xff1a;service nginx…

SpringSecurity6 | 退出登录后的JSON处理

✅作者简介:大家好,我是Leo,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉 🍎个人主页:Leo的博客 💞当前专栏: 循序渐进学SpringSecurity6 ✨特色专栏: MySQL学习 🥭本文内容:SpringSecurity6 | 退出登录后的JSON处理 📚个人知识库: Leo知识库,欢…

中间件系列 - Redis入门到实战(实战篇)

前言 学习视频&#xff1a; 黑马程序员Redis入门到实战教程&#xff0c;深度透析redis底层原理redis分布式锁企业解决方案黑马点评实战项目 中间件系列 - Redis入门到实战 本内容仅用于个人学习笔记&#xff0c;如有侵扰&#xff0c;联系删除 本章学习目标&#xff1a; 短…

关于Java并发、JVM面试题

前言 之前为了准备面试&#xff0c;收集整理了一些面试题。 本篇文章更新时间2023年12月27日。 最新的内容可以看我的原文&#xff1a;https://www.yuque.com/wfzx/ninzck/cbf0cxkrr6s1kniv 并发 进程与线程的区别 线程属于进程&#xff0c;进程可以拥有多个线程。进程独享…

闲来无事,使用C++和代理IP采集天气预报信息

目录 一、引言 二、代理IP原理 三、选择合适的代理IP服务 四、C程序实现 五、测试与优化 六、结论 一、引言 在当今的互联网时代&#xff0c;网络信息的获取变得日益重要。天气预报信息作为日常生活的重要参考&#xff0c;其获取方式也随着技术的发展而不断变化。在本文…

Gateway API 2

目录 文章目录 目录原文链接本节实战配置请求路由路由到指定版本基于用户身份路由基于权重的路由使用 TLS 暴露服务TCP 路由其他使用关于我最后 原文链接 https://onedayxyy.cn/docs/GatewayAPI/ 本节实战 实战名称&#x1f6a9; 实战&#xff1a;配置请求路由-2023.12.27&am…

Nginx快速入门:return、rewrite重定向、重写详解(六)

0. 引言 我们在日常的生产过程中&#xff0c;常常有需要重定向转发的需求&#xff0c;比如企业更换了域名&#xff0c;但又要保证之前的域名能访问&#xff0c;这就需要做重定向的跳转。 我们在之前的章节中学习了Nginx的负载均衡、各类转发代理配置&#xff0c;今天继续来补…
最新文章