日常开发当中,难免会出现这样一种情况,为一个按钮、TextView...设置一个点击状态的颜色改变,可能是background背景的改变,也可能是字体颜色的改变,简单点说:默认状态下,字体颜色或者背景是一种颜色,按下或者点击的时候,变成另一种颜色。

  这里面有一些小坑,为了避免踩到,特此小结一下。本文参考了 http://keeganlee.me/post/android/20150905。

(一)、selector做为drawable和color使用时的区别和注意事项

1、background的selector

   

  结论:background的selector,item只能用drawable属性,不能用color属性,并且drawable还必须用引用的形式

2、textcolor的selector

  

  结论:textcolor的selector,item不能使用drawable属性,只能用color属性,值可以直接指定,也可以引用指定。

总结:

  1、selector作为drawable资源时,item必须使用android:drawable属性指定,资源放在drawable目录下

  2、selector作为color资源时,item必须使用android:color属性指定,资源放在color目录下

注意:

  1、color资源也可以放于drawable目录,引用时则用@drawable来引用,但不推荐这么做,drawable资源和color资源最好还是分开;

  2、android:drawable属性除了引用@drawable资源,也可以引用@color颜色值;但android:color只能引用@color;

  3、item的状态是从上往下匹配的,如果匹配到一个item的状态,那它就将采用这个item指定的资源,而不是采用最佳匹配的规则;所以设置默认的状态,一定要写在最后,如果写在前面,则后面所有的item都不会起作用了(重点)。

  关于适用的时候的注意区别和注意事项就这些,下面让我们看看selector下的属性和item下的属性介绍。

(二)、selector下的属性

  1、android:dither="true"

    布尔值。值为“true”时,将在位图的像素配置与屏幕不同时(例如:ARGB 8888 位图和 RGB 565 屏幕)启用位图的抖动;值为“false”时则停用抖动。默认值为 true。    

  2、android:visible="true"

    设置初始的可见性状态,默认为false        

    3、android:autoMirrored="true"

    设置图片是否需要镜像反转,当布局方向是RTL,即从右到左布局时才有用,API Level 19(Android 4.4)才添加的属性

  4、android:constantSize="true"

    布尔值

    可绘制对象报告的内部大小,在状态变更时保持不变,则值为“true”(大小是所有状态的最大值);

    如果大小根据当前状态而变化,则值为“false”。默认值为 false。    

  5、android:variablePadding="true"

    布尔值

    如果可绘制对象的内边距,应根据选择的当前状态而变化,则值为“true”;

    如果内边距应保持不变(基于所有状态的最大内边距),则值为“false”。启用此功能要求您在状态变更时处理执行布局,这通常不受支持。默认值为 false。    

  6、android:exitFadeDuration="1000"

    状态改变时,旧状态消失时的淡出时间,以毫秒为单位

  7、android:enterFadeDuration="1000"

    状态改变时,新状态展示时的淡入时间,以毫秒为单位

(三)、item下的属性

  1、android:drawable

    可绘制对象资源必备。引用要插入的可绘制对象资源。

  2、android:state_pressed

    布尔值

    如果在按下对象(例如触摸/点按某按钮)时应使用此项目,则值为“true”;

    如果在默认的未按下状态时应使用此项目,则值为“false”。

  3、android:state_checked

    布尔值。如果在对象已选中时应使用此项目,则值为“true”;

    如果在对象未选中时应使用此项目,则值为“false”。  

  4、android:state_checkable

    布尔值

    如果当对象可选中时应使用此项目,则值为“true”;

    如果当对象不可选中时应使用此项目,则值为“false”。(仅当对象可在可选中与不可选中小部件之间转换时才有用。)    

  5、android:state_selected

    布尔值

    如果在使用定向控件浏览(例如使用方向键浏览列表)的情况下,对象为当前用户选择时应使用此项目,则值为“true”;

    如果在未选择对象时应使用此项目,则值为“false”。当焦点 (android:state_focused) 不充分(例如,列表视图有焦点但使用方向键选择其中的项目)时,使用所选状态。

  6、android:state_enabled

    布尔值

    如果在对象启用(能够接收触摸/点击事件)时应使用此项目,则值为“true”;

    如果在对象停用时应使用此项目,则值为“false”。

  7、android:state_focused

    布尔值

    如果在对象具有输入焦点(例如当用户选择文本输入时)时应使用此项目,则值为“true”;

    如果在默认的非焦点状态时应使用此项目,则值为“false”。

  8、android:state_activated

    布尔值

    如果在对象激活作为持续选择(例如,在持续导航视图中“突出显示”之前选中的列表项)时应使用此项目,则值为“true”;

    如果在对象未激活时应使用此项目,则值为“false”。此项为 API 级别 11 新引入的配置。

  9、android:state_hovered

    布尔值

    如果当光标悬停在对象上时应使用此项目,则值为“true”;

    如果在默认的非悬停状态时应使用此项目,则值为“false”。

    通常,这个可绘制对象可能与用于“聚焦”状态的可绘制对象相同。此项为 API 级别 14 新引入的配置。

  10、android:state_window_focused

    布尔值

    如果当应用窗口有焦点(应用在前台)时应使用此项目,则值为“true”;

    如果当应用窗口没有焦点(例如,通知栏下拉或对话框出现)时应使用此项目,则值为“false”。

 以下不常见的属性,目前还不清楚什么用,待补充。  

  11、android:state_last

  12、android:state_first

  13、android:state_middle

  14、android:state_single

  15、android:state_drag_can_accept

  16、android:state_drag_hovered

  17、android:state_accelerated

  18、android:state_active

 

  其实,在实际开发的过程中,这里面的很多属性都不会用到,大多数情况下,我们只需要根据控件的状态,设置相应的drawable或color资源就可以了,同时可以使用多个状态。例如:

    

  至此,selector及item下的属性和drawable、color属性时的注意事项全部介绍完毕!!!感谢阅读。

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Courier }
span.s1 { }
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px "Hannotate SC" }
span.s1 { }
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px "Hannotate SC" }
span.s1 { }
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px "Hannotate SC" }
span.s1 { }

Android样式之selector的更多相关文章

  1. 浅谈Android样式开发之selector

    引言 上一篇Android UI中文章我们详细介绍了Android中shape标签的使用.通过shape标签我们可以定义矩形.椭圆.环形.直线等效果.不过shape只能定义单一的形状,在实际开发中,我 ...

  2. Android样式的开发:selector篇

    上一篇详细讲了shape的用法,讲解了怎么用shape自定义矩形.圆形.线形和环形,以及有哪些需要注意的地方.不过,shape只能定义单一的形状,而实际应用中,很多地方比如按钮.Tab.ListIte ...

  3. [转]Android样式的开发:shape篇

    转载自Keegan小钢原文链接:http://keeganlee.me/post/android/20150830 Android样式的开发:shape篇Android样式的开发:selector篇A ...

  4. Android中的Selector的用法

    转自: Android中的Selector主要是用来改变ListView和Button控件的默认背景.其使用方法可以按一下步骤来设计: (以在mylist_view.xml为例) 1.创建mylist ...

  5. Android 样式的开发(转)

    Android(2)    目录(?)[-] rectangle oval line ring layer-list篇 普通图片 bitmap标签 点九图片 nine-patch标签 color标签 ...

  6. Android样式主题及自定义属性

    一.Selector——图形.颜色选择器 语法 <selector>   <item android:drawable=“drawableResA” android:state_xx ...

  7. 125、Android样式的开发(转载)

    Android样式的开发:drawable汇总篇 http://android.jobbole.com/82117/Android样式的开发:layer-list篇 http://android.jo ...

  8. Android样式的开发:shape篇

    转载请注明:转载自Keegan小钢并标明原文链接:http://keeganlee.me/post/android/20150830微信订阅号:keeganlee_me写于2015-08-30 And ...

  9. Android中的Selector的使用总结

    Android中的Selector主要是用来改变ListView和Button控件等其他空的默认背景,其使用方法可以如下所示: 1.首先在res目录下drawable文件夹,新建一个comm_butt ...

随机推荐

  1. Smart3D系列教程6之 《案例实战演练3——倾斜数据正射影像及DSM的生产》

    一.前言 Wish3D出品的系列教程中,前面两讲分别讲述说明了小物件的照片三维重建.大区域地形的三维重建,从照片的直接导入至软件到通过Excel表格将区块导入处理,从不同的模型类别.不同的导入方式演示 ...

  2. AOP面向切面编程的四种实现

     一.AOP(面向切面编程)的四种实现分别为最原始的经典AOP.代理工厂bean(ProxyFacteryBean)和默认自动代理DefaultAdvisorAutoProxyCreator以及Bea ...

  3. Java中堆内存和栈内存详解

    Java把内存分成两种,一种叫做栈内存,一种叫做堆内存 在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配.当在一段代码块中定义一个变量时,java就在栈中为这个变量分配内存空间 ...

  4. 方维 o2o app源码出售

    方维 o2o app源码出售 方维o2oapp源码出售 1.本人官方5万购买,现把方维o2o app 源码低价出售: 2.包括网站源码本地搭建包成功提供指导 3.包括网站说明文档,不包含app说明文档 ...

  5. 利用js来实现文字的滚动(也就是我们常常见到的新闻版块中的公示公告)

    首先先看一下大致效果图(因为是动态的,在页面无法显示出来) 具体的实现代码如下: 1.首先是css代码: <style type="text/css"> body,ul ...

  6. .net 下新版highcharts本地导出图片bug处理

    最近公司要用到highcharts这个插件来生成图表,所以我花了点时间研究了下. 现在最新的版本是3.0.2,这js插件居多优点就不比多说了,demo官网上也很详细.但是优点不爽的地方是,导出图片这个 ...

  7. Thrift-0.9.2编译安装

    确定安装好了boost1.54以上 确定libevent版本大于1.0 只编译生成cpp库 ./configure --without-java --without-lua --without-pyt ...

  8. Visual Studio 2013 Web开发

    cnbeta新闻:微软正式发布Visual Studio 2013 RTM版,微软还发布了Visual Studio 2013的最终版本..NET 4.5.1以及Team Foundation Ser ...

  9. 一步步学习javascript基础篇(1):基本概念

    一.数据类型 数据类型 基本数据类型(五种) Undefined Null Boolean Number String 复杂数据类型(一种) Object Undefined:只有一个值undefin ...

  10. Mina入门实例(一)

    mina现在用的很多了,之前也有用到,但是毕竟不熟悉,于是查了一些资料,做了一些总结.看代码是最直观的,比什么长篇大论都要好.不过其中重要的理论,也要理解下. 首先是环境,程序运行需要几个包,这里用m ...