当前位置: 首页 > news >正文

Android原生实现分段选择

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

一、效果图

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

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

dp_15:代表15dp

二、布局代码

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

  <!-- 日期标题 --><RadioGroupandroid:id="@+id/rg_date"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginRight="@dimen/dp_24"android:layout_marginTop="@dimen/dp_15"android:orientation="horizontal"android:padding="1dp"><RadioButtonandroid:id="@+id/rb_date_day"android:layout_width="@dimen/dp_34"android:layout_height="@dimen/dp_17"android:background="@drawable/day_checked"android:button="@null"android:checked="true"android:gravity="center"android:text="今日"android:textColor="@color/white"android:textSize="@dimen/sp_10" /><RadioButtonandroid:id="@+id/rb_date_week"android:layout_width="@dimen/dp_34"android:layout_height="@dimen/dp_17"android:button="@null"android:background="@drawable/week_checked"android:text="本周"android:gravity="center"android:textColor="@color/white"android:textSize="@dimen/sp_10" /><RadioButtonandroid:id="@+id/rb_date_month"android:layout_width="@dimen/dp_34"android:layout_height="@dimen/dp_17"android:gravity="center"android:background="@drawable/month_checked"android:button="@null"android:text="本月"android:textColor="@color/white"android:textSize="@dimen/sp_10" /></RadioGroup>

三、样式代码

    a.day_checked样式

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

   a.1 day_chart_seleced样式

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"><solid android:color="#ff2775de" /><strokeandroid:width="@dimen/dp_0.5"android:color="#2775DE" /><cornersandroid:bottomLeftRadius="5dp"android:bottomRightRadius="0dp"android:topLeftRadius="5dp"android:topRightRadius="0dp" />
</shape>

   a.2  day_chart_unseleced样式

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"><solid android:color="#06103A" /><strokeandroid:width="@dimen/dp_0.5"android:color="#2775DE" /><cornersandroid:bottomLeftRadius="5dp"android:bottomRightRadius="0dp"android:topLeftRadius="5dp"android:topRightRadius="0dp" />
</shape>

b.week_checked样式

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

b.2 week_chart_seleced样式

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"><solid android:color="#ff2775de" /><strokeandroid:width="@dimen/dp_0.5"android:color="#2775DE" /><corners android:radius="@dimen/dp_0" />
</shape>

b.3 week_chart_unseleced样式

         这个样式要特别做下说说明,因为“本周”那个控件位于组件的中部,所以边框样式会出现跟左右两边叠加的现象,从而造成边框过粗的视觉。为了解决这个问题,我采用的是layer-list层级布局,通过颜色覆盖的方式,影藏掉 “本周”那个控件的左右边框,来解决这一问题。下面是实现代码。

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"><item><shape><solid android:color="#06103A" /><strokeandroid:width="@dimen/dp_0.5"android:color="#2775DE" /><corners android:radius="@dimen/dp_0" /></shape></item><itemandroid:bottom="@dimen/dp_0.5"android:top="@dimen/dp_0.5"><shape><strokeandroid:width="@dimen/dp_0.5"android:color="#06103A" /></shape></item>
</layer-list>

c. month_checked样式

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

  c.1 month_chart_seleced样式

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"><solid android:color="#ff2775de" /><strokeandroid:width="@dimen/dp_0.5"android:color="#2775DE" /><cornersandroid:bottomLeftRadius="0dp"android:bottomRightRadius="5dp"android:topLeftRadius="0dp"android:topRightRadius="5dp" />
</shape>

  c.2 month_chart_unseleced样式

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"><solid android:color="#06103A" /><strokeandroid:width="@dimen/dp_0.5"android:color="#2775DE" /><cornersandroid:bottomLeftRadius="0dp"android:bottomRightRadius="5dp"android:topLeftRadius="0dp"android:topRightRadius="5dp" />
</shape>

四、java代码

 由于使用了databinding双向绑定,故就不演示findviewbyid,如果没有使用databinding,自行去实现就好,只需在onCreate()中调用就好。想了下还是加上findviewbyid方式,就怕遇到啥都不懂的新手抱怨。

方法一 //findviewbyid调用方式:findviewbyid(R.id.rg_gender).setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {@Overridepublic void onCheckedChanged(RadioGroup radioGroup, int id) {switch (id) {case R.id.rb_date_day:Log.d("RadioGroup", "===天===");break;case R.id.rb_date_week:Log.d("RadioGroup", "===周===");break;case R.id.rb_date_month:Log.d("RadioGroup", "===月===");break;}}});方法二
//databindig调用方式
//绑定数据mDataBinding.rgDate.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {@Overridepublic void onCheckedChanged(RadioGroup radioGroup, int id) {switch (id) {case R.id.rb_date_day:Log.d("RadioGroup", "===天===");break;case R.id.rb_date_week:Log.d("RadioGroup", "===周===");break;case R.id.rb_date_month:Log.d("RadioGroup", "===月===");break;}}});

给予新手的寄语

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

相关文章:

Android原生实现分段选择

六年前写的一个控件&#xff0c;一直没有时间总结&#xff0c;趁年底不怎么忙&#xff0c;整理一下之前写过的组件。供大家一起参考学习。废话不多说&#xff0c;先上图。 一、效果图 实现思路使用的是radioGroup加radiobutton组合方式。原理就是通过修改RadioButton 的backgr…...

在 Unity 中获取 Object 对象的编辑器对象

有这个需求的原因是&#xff0c;在编辑器的 Inspector 逻辑中&#xff0c;写了许多生成逻辑。 现在不想挨个在 Inspector 上都点一遍按钮&#xff0c;所以就需要能获取到它们的编辑器对象。 发现可以借助官方的 UnityEditor.Editor.CreateEditor 方法达到目的&#xff0c;如下…...

idea自动注释

前言 保存一下自己的自动注释代码 idea自动注释 前言1 创建类时&#xff0c;自动生成注释2 在方法上使用快捷键生成注释3 使用方法4 效果图 1 创建类时&#xff0c;自动生成注释 如下&#xff1a; #if (${PACKAGE_NAME} && ${PACKAGE_NAME} ! "")package …...

阿里云 ACK 云上大规模 Kubernetes 集群高可靠性保障实战

作者&#xff1a;贤维 马建波 古九 五花 刘佳旭 引言 2023 年 7 月&#xff0c;阿里云容器服务 ACK 成为首批通过中国信通院“云服务稳定运行能力-容器集群稳定性”评估的产品&#xff0c; 并荣获“先进级”认证。随着 ACK 在生产环境中的采用率越来越高&#xff0c;稳定性保…...

如何在无公网IP环境使用Windows远程桌面Ubuntu

文章目录 一、 同个局域网内远程桌面Ubuntu二、使用Windows远程桌面连接三、公网环境系统远程桌面Ubuntu1. 注册cpolar账号并安装2. 创建隧道&#xff0c;映射3389端口3. Windows远程桌面Ubuntu 四、 配置固定公网地址远程Ubuntu1. 保留固定TCP地址2. 配置固定的TCP地址3. 使用…...

Python——yolov8识别车牌2.0

目录 一、前言 二、关于项目UI 2.1、修改界面内容的文本 2.2、修改界面的图标和图片 三、项目修改地方 四、其他配置问题 一、前言 因为后续有许多兄弟说摄像头卡顿&#xff0c;我在之前那个MATS上面改一下就可以了&#xff0c;MAST项目&#xff1a;基于YOLOv8的多端车流检…...

Cookie的详解使用(创建,获取,销毁)

文章目录 Cookie的详解使用&#xff08;创建&#xff0c;获取&#xff0c;销毁&#xff09;1、Cookie是什么2、cookie的常用方法3、cookie的构造和获取代码演示SetCookieServlet.javaGetCookieServlet.javaweb.xml运行结果如下 4、Cookie的销毁DestoryCookieServletweb.xml运行…...

shell脚本自动化部署Zabbix4.2(修改脚本替换版本)

#!/bin/bash # 配置无人值守的安装&#xff0c;定义安装过程中需要用到的一些信息 DBPasswordadmin123 CacheSize256M ZBX_SERVER_NAMEZabbix-Server http_port80 # 配置 Zabbix 防火墙 firewall-cmd --permanent --zonepublic --add-port10051/tcp firewall-cmd…...

java SSM课程平台系统myeclipse开发mysql数据库springMVC模式java编程计算机网页设计

一、源码特点 java SSM课程平台系统是一套完善的web设计系统&#xff08;系统采用SSM框架进行设计开发&#xff0c;springspringMVCmybatis&#xff09;&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S…...

k8s二进制最终部署(网络 负载均衡和master高可用)

k8s中的通信模式 1、pod内部之间容器与容器之间的通信&#xff0c;在同一个pod 中的容器共享资源和网络&#xff0c;使用同一个网络命名空间&#xff0c;可以直接通信的 2、同一个node节点之内&#xff0c;不同pod之间的通信&#xff0c;每个pod都有一个全局的真实的IP地址&a…...

【51单片机系列】DS1302时钟模块

本文是关于DS1302时钟芯片的相关介绍。 文章目录 一、 DS1302时钟芯片介绍二、DS1302的使用2.1、DS1302的控制寄存器2.2、DS1302的日历/时钟寄存器2.3、片内RAM2.4、DS1302的读写时序 三、SPI总线介绍四、DS1302使用示例 一、 DS1302时钟芯片介绍 DS1302是DALLAS公司推出的涓流…...

深入理解C语言中冒泡排序(优化)

目录 引言&#xff1a; 冒泡排序概述&#xff1a; 优化前&#xff1a; 优化后(注意看注释)&#xff1a; 解析优化后&#xff1a; 原理&#xff08;先去了解qsort&#xff09;&#xff1a; 引言&#xff1a; 排序算法是计算机科学中的基础问题之一。在本篇博客中&#xff0c…...

低代码选型注意事项

凭借着革命性的生产力优势&#xff0c;低代码技术火爆了整个IT圈。面对纷繁复杂的低代码和无代码产品&#xff0c;开发者该如何选择&#xff1f; 在研究低代码平台的年数上&#xff0c;本人已有3年&#xff0c;也算是个低代码资深用户了&#xff0c;很多企业面临低代码选型上的…...

Caffeine--缓存组件

Caffeine 概念缓存手动加载自动加载手动异步加载自动异步加载 驱逐策略基于容量基于时间基于引用 移除显式移除 概念 Caffeine是一个基于Java8开发的提供了近乎最佳命中率的高性能的缓存库。与ConcurrentMap有点相似。最根本的区别是ConcurrentMap将会持有所有加入到缓存当中的…...

Centos7:Jenkins+gitlab+node项目启动(1)

Centos7&#xff1a;Jenkinsgitlabnode项目启动(1) Centos7&#xff1a;Jenkinsgitlabnode项目启动(1)-CSDN博客 Centos7&#xff1a;Jenkinsgitlabnode项目启动(2) Centos7&#xff1a;Jenkinsgitlabnode项目启动(2)-CSDN博客 Centos7&#xff1a;Jenkinsgitlabnode项目启…...

starrocks集群fe/be节点进程守护脚本

自建starrocks集群&#xff0c;有时候服务会挂掉&#xff0c;无法自动拉起服务&#xff0c;于是采用supervisor进行进程守护。可能是版本的原因&#xff0c;supervisor程序总是异常&#xff0c;无法对fe//be进行守护。于是写了个简易脚本。 #!/bin/bash AppNameFecom.starrock…...

奇富科技跻身国际AI学术顶级会议ICASSP 2024,AI智能感知能力迈入新纪元

近日&#xff0c;2024年IEEE声学、语音与信号处理国际会议ICASSP 2024&#xff08;2024 IEEE International Conference on Acoustics, Speech, and Signal Processing&#xff09;宣布录用奇富科技关于语音情感计算的最新研究成果论文“MS-SENet: Enhancing Speech Emotion Re…...

如何在Android Termux中使用SFTP实现远程传输文件

文章目录 1. 安装openSSH2. 安装cpolar3. 远程SFTP连接配置4. 远程SFTP访问5. 配置固定远程连接地址6、结语 SFTP&#xff08;SSH File Transfer Protocol&#xff09;是一种基于SSH&#xff08;Secure Shell&#xff09;安全协议的文件传输协议。与FTP协议相比&#xff0c;SFT…...

高频知识汇总 | 【操作系统】面试题汇总(万字长博通俗易懂)

前言 这篇我亲手整理的【操作系统】资料&#xff0c;融入了我个人的理解。当初我在研习八股文时&#xff0c;深感复习时的困扰&#xff0c;网上资料虽多&#xff0c;却过于繁杂&#xff0c;有的甚至冗余。例如&#xff0c;文件管理这部分&#xff0c;在实际面试中很少涉及&…...

【前端框架】NPM概述及使用简介

什么是 NPM npm之于Node,就像pip之于Python,gem之于Ruby,composer之于PHP。 npm是Node官方提供的包管理工具,他已经成了Node包的标准发布平台,用于Node包的发布、传播、依赖控制。npm提供了命令行工具,使你可以方便地下载、安装、升级、删除包,也可以让你作为开发者发布…...

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…...

51c自动驾驶~合集58

我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留&#xff0c;CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制&#xff08;CCA-Attention&#xff09;&#xff0c;…...

centos 7 部署awstats 网站访问检测

一、基础环境准备&#xff08;两种安装方式都要做&#xff09; bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats&#xff0…...

【2025年】解决Burpsuite抓不到https包的问题

环境&#xff1a;windows11 burpsuite:2025.5 在抓取https网站时&#xff0c;burpsuite抓取不到https数据包&#xff0c;只显示&#xff1a; 解决该问题只需如下三个步骤&#xff1a; 1、浏览器中访问 http://burp 2、下载 CA certificate 证书 3、在设置--隐私与安全--…...

MySQL中【正则表达式】用法

MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现&#xff08;两者等价&#xff09;&#xff0c;用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例&#xff1a; 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...

3403. 从盒子中找出字典序最大的字符串 I

3403. 从盒子中找出字典序最大的字符串 I 题目链接&#xff1a;3403. 从盒子中找出字典序最大的字符串 I 代码如下&#xff1a; class Solution { public:string answerString(string word, int numFriends) {if (numFriends 1) {return word;}string res;for (int i 0;i &…...

[Java恶补day16] 238.除自身以外数组的乘积

给你一个整数数组 nums&#xff0c;返回 数组 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法&#xff0c;且在 O(n) 时间复杂度…...

Unsafe Fileupload篇补充-木马的详细教程与木马分享(中国蚁剑方式)

在之前的皮卡丘靶场第九期Unsafe Fileupload篇中我们学习了木马的原理并且学了一个简单的木马文件 本期内容是为了更好的为大家解释木马&#xff08;服务器方面的&#xff09;的原理&#xff0c;连接&#xff0c;以及各种木马及连接工具的分享 文件木马&#xff1a;https://w…...

基于IDIG-GAN的小样本电机轴承故障诊断

目录 🔍 核心问题 一、IDIG-GAN模型原理 1. 整体架构 2. 核心创新点 (1) ​梯度归一化(Gradient Normalization)​​ (2) ​判别器梯度间隙正则化(Discriminator Gradient Gap Regularization)​​ (3) ​自注意力机制(Self-Attention)​​ 3. 完整损失函数 二…...

永磁同步电机无速度算法--基于卡尔曼滤波器的滑模观测器

一、原理介绍 传统滑模观测器采用如下结构&#xff1a; 传统SMO中LPF会带来相位延迟和幅值衰减&#xff0c;并且需要额外的相位补偿。 采用扩展卡尔曼滤波器代替常用低通滤波器(LPF)&#xff0c;可以去除高次谐波&#xff0c;并且不用相位补偿就可以获得一个误差较小的转子位…...