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

Android:Selector + Layer-lists 实现 AppCompatCheckBox

最近做项目涉及到一些UI相关的东东,虽然比较简单,但是也很有趣,写两篇简短的博客记录一下。

一."Selector + 两张图片"实现 AppCompatCheckBox

AppCompatCheckBox 是 androidx的一个widget:androidx.appcompat.widget.AppCompatCheckBox

1.通常用 "selector + 两张图片"就能实现AppCompatCheckBox的效果

  • AppCompatCheckBox 的 android:button="@drawable/selector_name.xml"引用selector
  • selector 的 android:state_checked="true"/"false" 分别引用CheckBox打开/关闭的两张背景图片

这个过程比较简单,大概列举下:

​两张原图:

img_switch_bg_point_off.png    /    img_switch_bg_point_on.png

                                  

AppCompatCheckBox:

<androidx.appcompat.widget.AppCompatCheckBoxandroid:id="@+id/check_box"android:layout_width="64dp"android:layout_height="40dp"android:button="@drawable/switch_checkbox_selector" />

switch_checkbox_selector.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="@mipmap/img_switch_bg_point_on" /><item android:state_checked="false" android:drawable="@mipmap/img_switch_bg_point_off" />
</selector>

效果如下:

2."Selector +Layer-lists" 实现多图重合叠加的CheckBox

UI提了个需求,要求CheckBox在打开和关闭状态下,分别使用两张图重合叠加实现开关效果

也就是说,打开CheckBox是两张图重合叠加,关闭是另外两张图重合叠加

这个好办,Layer-lists出马

四张原图:

(1).CheckBox打开时原图:

 背景图:        按钮图: 

​(2).CheckBox关闭时原图:

 背景图:        按钮图:        

AppCompatCheckBox:

跟上一节是一样的

<androidx.appcompat.widget.AppCompatCheckBoxandroid:id="@+id/check_box"android:layout_width="64dp"android:layout_height="40dp"android:button="@drawable/switch_checkbox_selector" />

switch_checkbox_selector.xml:

这里就不是直接加载图片了,而是加载两个layer-list.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/switch_checkbox_selector_on_layerlists" /><item android:state_checked="false" android:drawable="@drawable/switch_checkbox_selector_off_layerlists" />
</selector>

switch_checkbox_selector_on_layerlists.xml

加载打开状态下的背景图和按钮图

<?xml version="1.0" encoding="utf-8"?> 
<layer-list   xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@mipmap/img_switch_on_bg" /> <item android:drawable="@mipmap/img_switch_on_icon" /> 
</layer-list>

switch_checkbox_selector_off_layerlists.xml

加载关闭状态下的背景图和按钮图

<?xml version="1.0" encoding="utf-8"?> 
<layer-list   xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@mipmap/img_switch_off_bg" /> <item android:drawable="@mipmap/img_switch_off_icon" /> 
</layer-list>

效果如下:

http://www.lryc.cn/news/91116.html

相关文章:

  • TreeMap类型添加数据
  • iOS 16 UI 设计系统免费在线使用方法
  • 【接口测试】JMeter接口关联测试
  • 腾讯云服务器ping不通解决方法(公网IP/安全组/系统多维度)
  • 【C++/嵌入式笔试面试八股】一、32.封装
  • 【算法】Transform to Chessboard 变为棋盘
  • vue通过封装$on定义全局事件
  • 资产管理规范
  • 已解决:如何从别人的仓库那里克隆到自己的仓库,并修改代码并提交。
  • 剑指 Offer 18. 删除链表的节点
  • WiFi 6 vs WiFi 5
  • PHP语言基础
  • 怎么用Excel VBA写一个excel批量合并的程序?
  • WuThreat身份安全云-TVD每日漏洞情报-2023-05-22
  • Eclipse教程 Ⅵ
  • Seaborn.load_dataset()加载数据集失败最佳解决方法
  • java 区分缺陷Defects/感染Infections/失败Failure
  • 如何学习R-Meta分析与【文献计量分析、贝叶斯、机器学习等】多技术融合?
  • 分布式锁的应用场景与分布式锁实现(二):基于Redis实现分布式锁
  • 【JavaSE】Java基础语法(四十二):NIO
  • Linux---systemctl
  • 零钱兑换,凑零钱问题,从暴力递归到动态规划(java)
  • Vue登录界面精美模板分享
  • Linux设备驱动程序(二)——建立和运行模块
  • 【算法】单调栈问题
  • Hack The Box - 关卡Dancing
  • 【软件设计与体系结构】 软件体系结构风格
  • detectron2 使用教程
  • 哈希表常用数据结构
  • Java字节流