Android selector的详解

前言:
StateListDrawable 是一种通过XML文件来定义的drawable,使用几个不同的图片来呈现同一个图形,通过object的状态来实现切换。例如,一个Button有几个不同的状态(按压,获取焦点等等),这种情况下,通过使用 state list drawable,你就可以实现在不同的状态下使用不同的背景图片。
你可以在一个XML文件中描述state list。通过在根节点selector下定义一个item元素来添加每个图形。每一各item中使用不同的状态属性来定义不用的drawable。
当每一次状态改变的时候,state list都会从上到下被遍历一遍,第一个与当前state相匹配的item将会被使用—- 这个选择并不是作出“最匹配”结果,而是简单的找到第一个匹配的状态。
selector一般都是用来作为有状态改变的View的背景,以此来达到当用户对View进行操作,导致View状态改变时,作出改变,让用户感知View的状态变化。
官方说明
文件位置:res/drawable/filename.xml
编译资源类型:StateListDrawable
资源引用:
In Java: R.drawable.filename
In XML: @[package:]drawable/filename
语法:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"
android:constantSize=["true" | "false"]
android:dither=["true" | "false"]
android:variablePadding=["true" | "false"] >
<item
android:drawable="@[package:]drawable/drawable_resource"
android:state_pressed=["true" | "false"]
android:state_focused=["true" | "false"]
android:state_hovered=["true" | "false"]
android:state_selected=["true" | "false"]
android:state_checkable=["true" | "false"]
android:state_checked=["true" | "false"]
android:state_enabled=["true" | "false"]
android:state_activated=["true" | "false"]
android:state_window_focused=["true" | "false"] />
</selector>
更多详细说明,请查阅xsoftlab
实际使用
下面做一个简单的实例,对Button的背景根据状态做一下处理
XML文件
selector_ts.xml
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@color/pink" android:state_pressed="true" /> <item android:drawable="@color/yellow" android:state_selected="true" /> <item android:drawable="@drawable/shaperect" android:state_enabled="false" /> <item android:drawable="@color/stone" android:state_enabled="true" /> </selector>
主布局文件(activity_main.xml)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:focusable="true"
android:focusableInTouchMode="true"
android:orientation="vertical"
android:padding="10dp"
tools:context="mraz.com.tabdemo.MainActivity">
<Button
android:id="@+id/bt_content"
android:layout_width="match_parent"
android:layout_height="300dp"
android:background="@drawable/selector_ts" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="50dp"
android:orientation="horizontal">
<Button
android:id="@+id/bt_selected"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Select"
android:textAllCaps="false" />
<Button
android:id="@+id/bt_disable"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Disable"
android:textAllCaps="false" />
<Button
android:id="@+id/bt_pressed"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Press"
android:textAllCaps="false" />
</LinearLayout>
</LinearLayout>
代码部分 比较简单,这里就不占用过多的篇幅了,看下简单的效果,大家应该就知道如何编写小小的Activity了。
实际效果
如有疑问请留言或者到本站社区交流讨论,本站关于Android 开发的文章还有很多,欢迎大家搜索查阅,谢谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
# Android
# selector
# selector的使用方法
# Android selector背景选择器的使用详解
# Android Selector和Shape的使用方法
# Android使用selector修改TextView中字体颜色和背景色的方法
# 基于android背景选择器selector的用法汇总
# Android中Listview点击item不变颜色及设置listselector 无效的解决方案
# Android中的Shape和Selector的结合使用实例
# Android编程之selector下设置背景属性值的方法
# 第一个
# 都是
# 几个
# 是一种
# 你可以
# 你就
# 将会
# 就不
# 如有
# 遍历
# 一遍
# 希望能
# 有几个
# 做一个
# 欢迎大家
# 可以实现
# 谢谢大家
# 来实现
# 还有很多
# 相匹配
相关文章:
潍坊网站制作公司有哪些,潍坊哪家招聘网站好?
nginx修改上传文件大小限制的方法
香港服务器租用每月最低只需15元?
成都品牌网站制作公司,成都营业执照年报网上怎么办理?
图片制作网站免费软件,有没有免费的网站或软件可以将图片批量转为A4大小的pdf?
php条件判断怎么写_ifelse和switchcase的使用区别【对比】
网站插件制作软件免费下载,网页视频怎么下到本地插件?
专业企业网站设计制作公司,如何理解商贸企业的统一配送和分销网络建设?
c# Task.Yield 的作用是什么 它和Task.Delay(1)有区别吗
建站中国官网:模板定制+SEO优化+建站流程一站式指南
电商网站制作公司有哪些,1688网是什么意思?
昆明高端网站制作公司,昆明公租房申请网上登录入口?
如何制作算命网站,怎么注册算命网站?
建站之星图片链接生成指南:自助建站与智能设计教程
我的世界制作壁纸网站下载,手机怎么换我的世界壁纸?
如何挑选最适合建站的高性能VPS主机?
如何选择高效稳定的ISP建站解决方案?
微信小程序 五星评分(包括半颗星评分)实例代码
建站中国必看指南:CMS建站系统+手机网站搭建核心技巧解析
南京做网站制作公司,南京哈发网络有限公司,公司怎么样,做网页美工DIV+CSS待遇怎么样?
如何配置FTP站点权限与安全设置?
建站之星如何快速解决建站难题?
制作企业网站建设方案,怎样建设一个公司网站?
如何自定义建站之星模板颜色并下载新样式?
东莞专业网站制作公司有哪些,东莞招聘网站哪个好?
如何在阿里云域名上完成建站全流程?
如何用已有域名快速搭建网站?
如何在阿里云高效完成企业建站全流程?
如何用腾讯建站主机快速创建免费网站?
如何在万网主机上快速搭建网站?
网站制作与设计教程,如何制作一个企业网站,建设网站的基本步骤有哪些?
制作网站外包平台,自动化接单网站有哪些?
详解jQuery停止动画——stop()方法的使用
临沂网站制作公司有哪些,临沂第四中学官网?
Avalonia如何实现跨窗口通信 Avalonia窗口间数据传递
如何选择高效可靠的多用户建站源码资源?
怎么将XML数据可视化 D3.js加载XML
建站之星伪静态规则如何设置?
建站之星如何一键生成手机站?
如何在云服务器上快速搭建个人网站?
历史网站制作软件,华为如何找回被删除的网站?
如何在云主机上快速搭建多站点网站?
独立制作一个网站多少钱,建立网站需要花多少钱?
IOS倒计时设置UIButton标题title的抖动问题
建站VPS能否同时实现高效与安全翻墙?
如何快速查询网站的真实建站时间?
如何自定义建站之星网站的导航菜单样式?
如何在IIS7中新建站点?详细步骤解析
再谈Python中的字符串与字符编码(推荐)
如何快速查询域名建站关键信息?
*请认真填写需求信息,我们会在24小时内与您取得联系。