Android Selector的简写
在Android中,我们需要实现一个View的点击或选中样式的改变,大多数情况下我们都是使用drawable
文件,也就是selector
,shape
等组成的资源文件。大致套路如下的常规写法:
常规写法
比如新建一个正常状态下的shape文件sp_normal.xml
,选中状态的sp_checked.xml
,组合两个shape的sr_default.xml
。
<?xml version="1.0" encoding="utf-8"?>
<!--sp_normal.xml-->
<shape xmlns:android="http://schemas.android.com/apk/res/android"android:shape="rectangle"><solid android:color="@android:color/black" /><corners android:radius="4dp" />
</shape>
复制代码
<?xml version="1.0" encoding="utf-8"?>
<!--sp_checked.xml-->
<shape xmlns:android="http://schemas.android.com/apk/res/android"android:shape="rectangle"><solid android:color="@android:color/holo_red_light" /><corners android:radius="4dp" />
</shape>
复制代码
<?xml version="1.0" encoding="utf-8"?>
<!--sr_default.xml-->
<selector xmlns:android="http://schemas.android.com/apk/res/android"><item android:drawable="@drawable/sp_normal" android:state_checked="false" /><item android:drawable="@drawable/sp_checked" android:state_checked="true" />
</selector>
复制代码
然后将sr_default.xml
设置给View的background
<CheckedTextViewandroid:id="@+id/tv_normal_n"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginTop="44dp"android:background="@drawable/sr_default"android:checked="false"android:padding="10dp"android:text="普通的 checked == false"android:textColor="@android:color/white"app:layout_constraintLeft_toLeftOf="parent"app:layout_constraintRight_toRightOf="parent"app:layout_constraintTop_toTopOf="parent" /><CheckedTextViewandroid:id="@+id/tv_normal_c"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginTop="24dp"android:background="@drawable/sr_default"android:checked="true"android:padding="10dp"android:text="普通的 checked == true"android:textColor="@android:color/white"app:layout_constraintLeft_toLeftOf="parent"app:layout_constraintRight_toRightOf="parent"app:layout_constraintTop_toBottomOf="@id/tv_normal_n" />
复制代码
显示效果如下:
下面我们来看看怎么简写这个样式。
简易写法
我们只需要新建一个sr_simplify.xml
文件,父标签是selector
,子shape标签用item
标签包裹。
<?xml version="1.0" encoding="utf-8"?>
<!--sr_simplify.xml-->
<selector xmlns:android="http://schemas.android.com/apk/res/android"><item android:state_checked="false"><shape xmlns:android="http://schemas.android.com/apk/res/android"android:shape="rectangle"><solid android:color="@android:color/black" /><corners android:radius="4dp" /></shape></item><item android:state_checked="true"><shape xmlns:android="http://schemas.android.com/apk/res/android"android:shape="rectangle"><solid android:color="@android:color/holo_red_light" /><corners android:radius="4dp" /></shape></item></selector>
复制代码
布局跟上面布局差不多,直接看显示效果:
总结
我们实践发现两种写法都可以实现同样的需求,但是具体要使用哪种可以依据自己的实际情况来抉择。
- 方式一可以实现更好的解耦,shape文件也可以复用
- 方式二写起来更加简单,也减少了样式文件
源码地址:https://github.com/simplepeng/AndroidExamples/tree/master/example_simplify_selector
Android Selector的简写相关推荐
- android 动态修改 selector,Android Selector 按下修改背景和文本颜色的实现代码
1,selector 按下修改背景和文本颜色 [1]点击改变字体颜色 - android:state_pressed(按压状态) [2]selector状态选择器(bg_btn_two (存放 res ...
- Android Selector 用法
此贴为转载 ,不是本人制作. Android中的Selector主要是用来改变ListView和Button控件的默认背景.其使用方法可以按一下步骤来设计:(以在mylist_view.xml为例) ...
- android selector点击修改颜色,Android Selector 按下修改背景和文本颜色的实现代码
1,selector 按下修改背景和文本颜色 [1]点击改变字体颜色 - android:state_pressed(按压状态) [2]selector状态选择器(bg_btn_two (存放 res ...
- Android selector 使用注意.
下面是几个是实现的效果 效果图demo 地址 selector 的作用: selector 是选择,用来修改修改控件的背景,设置点击效果,等, 自己一般使用在点击之后改变控件的背景色以及文字的颜色,比 ...
- android selector的用法解析
Selector 的英文是选择器,挑战者 android中主要是背景选择器 selector 是在drawable/xxx.xml中配置的 相关属性: android:state_selected是选 ...
- [转]android selector 背景选择器
关于listview和button都要改变android原来控件的背景,在网上查找了一些资料不是 很全,所以现在总结一下android的selector的用法. 首先android的selector是 ...
- android selector下的设置背景属性值
在res/drawable文件夹新增一个文件,此文件设置了图片的触发状态,你可以设置 state_pressed,state_checked,state_pressed,state_selected, ...
- Android selector 使用
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="ht ...
- Android selector
以前知道selector可以设置图片选择没有选择,不知道文字也可以.最近做项目,看到那个文字,点击一个颜色,不点击一个颜色.才知道原来文字也可以selector. 使用如下: <TextView ...
最新文章
- ig服务器维护,IG夺冠遭无视后,LOL官方公开道歉:对不起,都是服务器的问题!...
- AgilePoint模型驱动BPM(业务流程管理)介绍
- centos llvm安装_在CentOS上编译安装llvm-3.8.1详细教程
- VTK:PolyData之ThinPlateSplineTransform
- 在c语言中如何屏蔽一段程序,如何在用C语言关闭TCP程序中的Nagle算法
- ftp服务器需要什么系统,ftp服务器需要什么系统
- oracle开归档服务器,ORACLE RAC 启用归档
- Consul在.Net Core中初体验
- wordpress mysql缓存_WordPress 对象缓存与数据库缓存
- kali数据库渗透_Kali Linux渗透测试实战 1.4 小试牛刀
- 显示js对象所有属性和方法的函数
- eclipse下载支持compiler compliance level 1.8的插件
- Landsat卫星MSS/TM/ETM数据(转自ESRI社区)(二)
- PTB-XL心电信号处理
- scroll案例:带有动画的返回顶部
- android换肤的实现方案,Android 换肤的思路
- C# 实现解答数独功能
- java中竖线怎么画_java split | (竖线)
- 温暖(warmth)
- 最新Python 实现自动登录抖音(京东),实现滑块自动滑过
热门文章
- mantis1.18升级1.2X方法
- WCF热带鱼书学习手记 - Service Contract Overload
- android kotlin面试题,Kotlin面试25题
- 科研SCI论文图片常见问题和错误汇总
- Mybatis报错ClassNotfind
- vsprintf用法解析
- colab出现input output error问题
- 光流 | 光流算法对比:Farneback、Horn-Schunck、Lucas-Kanade、Lucas-Kanade derivative of Gaussian(附Matlab与C++代码)
- SLAM | 三维重建方法之KinectFusion与ElasticFusion详解
- tiny cc在云服务centos上运行