Android selector的实例详解
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 开发的文章还有很多,欢迎大家搜索查阅,谢谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
相关文章
ScrollView与SeekBar绑定实现滑动时出现小滑块效果
这篇文章主要为大家详细介绍了ScrollView与SeekBar绑定实现滑动时出现小滑块效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下2017-10-10Android HttpURLConnection断点下载(单线程)
这篇文章主要为大家详细介绍了Android HttpURLConnection断点下载的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下2017-05-05Kotlin中let()with()run()apply()also()函数的使用方法与区别
在Kotlin中的源码标准库(Standard.kt)中提供了一些Kotlin扩展的内置函数可以优化kotlin的编码,今天为大家聊聊let,with,run,apply,also几个函数的用法与区别2018-03-03Android DrawerLayout实现抽屉效果实例代码
这篇文章主要介绍了Android DrawerLayout实现抽屉效果的实例代码,非常不错,具有参考借鉴价值,需要的朋友可以参考下2016-12-12Android 后台发送邮件示例 (收集应用异常信息+Demo代码)
今天介绍个更简单的方法,我们把异常信息收集后,通过后台发送邮件方法,把相关异常信息发送到我们指定的邮箱里面2013-07-07微前端架构ModuleFederationPlugin源码解析
这篇文章主要为大家介绍了微前端架构ModuleFederationPlugin源码解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪2022-11-11Flutter Reusable Lottie Animations技巧
这篇文章主要为大家介绍了Flutter Reusable Lottie Animations技巧,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪2022-12-12Android通过Java sdk的方式接入OpenCv的方法
这篇文章主要介绍了Android通过Java sdk的方式接入OpenCv的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2020-04-04
最新评论