Android selector详解

背景:给控件不同状态设置背景色时,经常起不到效果,百思不得其解,后面才发现中的需要按一定顺序排列,下面对Selector的用法以及需要注意事项进行说明。

说明

selector集合定义在xml文件里面,View对象背景颜色的选择取决于自身当前的状态,总共有pressed、focused、selected、checkable、checked、enabled、window_focused和default八种状态,View对象的每一种状态可以设置不同的背景色。

匹配规则

我们知道可以给一个对象的多种状态设置不同的背景颜色,那么对象是如何根据状态来匹配颜色呢?规则是:根据当前对象状态,在selector集合中从上到下匹配,被匹配到的第一项作为对象的背景色。

注意点

1、因为匹配的第一项作为当前View对象的背景颜色,结束匹配。如果第一项每次都能被匹配到,就不会往下匹配,那么之后的状态也就失效了。然而每一个View对象都有默认状态,所以这也就是为什么默认状态不能放在开头,而要放到最后的原因。
2、不是所有的View子类都拥有八种状态,比如Button对象,拥有pressed、enabled、window_focused、default四种状态,如果设置selected是无效的,所以要根据组件的具体情况设置。
3、状态的顺序排放。
pressed->focused->selected->checkable->checked->enabled->window_focused->default
具体排放顺序还得根据当前View对象拥有的状态来排列。记住默认的权重是最大的,要放在最后面。

语法

Android selector详解_第1张图片
Alt text

有些同学可能会问这些状态是什么意思,什么时候被触发?

  • android:state_enabled
    View对象没有被禁用时触发,即android:enabled="true",否则失效。

  • android:state_window_focused
    当前Activity拥有用户输入焦点时被触发,即显示在最前端,如果有退出后台或者弹出Dialog会失效。

其他都好理解,这里就不做解释了。

应用

以一个Button按钮为例,点击按钮切换背景颜色。

  1. 在res/drawable目录下创建btn_touch_feedback.xml文件

   
        
     

2.在Button中应用

来看我文章的同学们,如果觉得写的不错,给我点个赞吧!

你可能感兴趣的:(Android selector详解)