zoukankan      html  css  js  c++  java
  • android selector详解

    --> 改变字体的颜色
    <selector xmlns:android="http://schemas.android.com/apk/res/android"> <!-- 当前窗口失去焦点时 --> <item android:color="@android:color/black" android:state_window_focused="false" /> <!-- 不可用时 --> <item android:color="@android:color/background_light" android:state_enabled="false" /> <!-- 按压时 --> <item android:color="@android:color/holo_blue_light" android:state_pressed="true" /> <!-- 被选中时 --> <item android:color="@android:color/holo_green_dark" android:state_selected="true" /> <!-- 被激活时 --> <item android:color="@android:color/holo_green_light" android:state_activated="true" /> <!-- 默认时 --> <item android:color="@android:color/white" /> </selector>

    --> 改变按钮的背景
     
    ?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
        <!-- 当前窗口失去焦点时 -->
        <item android:drawable="@drawable/bg_btn_lost_window_focused" android:state_window_focused="false" />
        <!-- 不可用时 -->
        <item android:drawable="@drawable/bg_btn_disable" android:state_enabled="false" />
        <!-- 按压时 -->
        <item android:drawable="@drawable/bg_btn_pressed" android:state_pressed="true" />
        <!-- 被选中时 -->
        <item android:drawable="@drawable/bg_btn_selected" android:state_selected="true" />
        <!-- 被激活时 -->
        <item android:drawable="@drawable/bg_btn_activated" android:state_activated="true" />
        <!-- 默认时 -->
        <item android:drawable="@drawable/bg_btn_normal" />
    </selector>

    那么,在使用过程中,有几点还是需要注意和了解的:

    1. selector作为drawable资源时,item指定android:drawable属性,并放于drawable目录下;
    2. selector作为color资源时,item指定android:color属性,并放于color目录下;
    3. color资源也可以放于drawable目录,引用时则用@drawable来引用,但不推荐这么做,drawable资源和color资源最好还是分开;
    4. android:drawable属性除了引用@drawable资源,也可以引用@color颜色值;但android:color只能引用@color
    5. item是从上往下匹配的,如果匹配到一个item那它就将采用这个item,而不是采用最佳匹配的规则;所以设置默认的状态,一定要写在最后,如果写在前面,则后面所有的item都不会起作用了。

    另外,selector标签下有两个比较有用的属性要说一下,添加了下面两个属性之后,则会在状态改变时出现淡入淡出效果,但必须在API Level 11及以上才支持:

    • android:enterFadeDuration 状态改变时,新状态展示时的淡入时间,以毫秒为单位
    • android:exitFadeDuration 状态改变时,旧状态消失时的淡出时间,以毫秒为单位
     
    --> listview中设置selector


    最后,关于ListView的ListItem样式,有两种设置方式,一种是在ListView标签里设置android:listSelector属性,另一种是在ListItem的布局layout里设置android:background。但是,这两种设置的结果却有着不同。同时,使用ListView时也有些其他需要注意的地方,总结如下

    1. android:listSelector设置的ListItem默认背景是透明的,不管你在selector里怎么设置都无法改变它的背景。所以,如果想改ListItem的默认背景,只能通过第二种方式,在ListItem的布局layout里设置android:background
    2. 当触摸点击ListItem时,第一种设置方式下,state_pressedstate_focusedstate_window_focused设为true时都会触发,而第二种设置方式下,只有state_pressed会触发。
    3. 当ListItem里有Button或CheckBox之类的控件时,会抢占ListItem本身的焦点,导致ListItem本身的触摸点击事件会无效。那么,要解决此问题,有三种解决方案:

      • 将Button或CheckBox换成TextView或ImageView之类的控件
      • 设置Button或CheckBox之类的控件设置focusable属性为false
      • 设置ListItem的根布局属性android:descendantFocusability="blocksDescendants"

      第三种是最方便,也是推荐的方式,它会将ListItem根布局下的所有子控件都设置为不能获取焦点。android:descendantFocusability属性的值有三种,其中,ViewGroup是指设置该属性的View,本例中就是ListItem的根布局:

      • beforeDescendants:ViewGroup会优先其子类控件而获取到焦点
      • afterDescendants:ViewGroup只有当其子类控件不需要获取焦点时才获取焦点
      • blocksDescendants:ViewGroup会覆盖子类控件而直接获得焦点
     
  • 相关阅读:
    jQuery语音播放插件
    Oracle(+)号用法
    重写IHttpHandler,实现前后端分离
    JavaScript运算符
    SQL Server 备份和还原
    ReactJS入门
    用Owin Host实现脱离IIS跑Web API单元测试
    Lua
    代码评比结果的反思
    我为什么要在总理来的第二天离开创业大街(转)
  • 原文地址:https://www.cnblogs.com/jeno-song/p/5545608.html
Copyright © 2011-2022 走看看