zoukankan      html  css  js  c++  java
  • Android中selector背景选择器

    http://blog.csdn.net/forsta/article/details/26148403

    http://blog.csdn.net/wswqiang/article/details/6616306

    http://blog.csdn.net/shakespeare001/article/details/7788400

    在Android开发过程中,经常对某一View的背景在不同的状态下,设置不同的背景,增强用户体验。如果按钮,在按下时,背景变化,如果在代码中动态设置,相对比较麻烦。Android为我们提供了selector背景选择器可以非常方便的解决这一问题。

    一,Selector的结构描述:

    1.android:state_pressed="true/false"

    true:表示按下状态下使用,false:表示非按下状态下使用。

    2.android:state_focused="true/false"

    ture:表示聚焦状态使用(例如使用滚动球/D-pad聚焦Button),false:表示非聚集状态下使用。

    3.android:state_selected="true/false"

    true:表示被选中状态下使用,false:表示非选中下使用

    4.android:state_active="true/false"

    true:表示可勾选状态时使用,false:表示不可勾选状态下使用

    5. android:state_checkable="true/false"

    true:表示勾选状态下使用,false:表示非勾选状态使用

    6.android:state_checked="true/false"

    true:表示勾选状态下使用,false:表示非勾选状态使用

    7. android:state_enabled="true/false"

    true:表示可用状态使用(能接收触摸/点击事件),false:表示不可用状态使用

    8. android:state_window_focused="true/false"

    true:表示应用程序窗口有焦点时使用(应用程序在前台),false:表示无焦点时使用
    9.android:drawable

    设置背景图片

    二,编写格式

    <?xml version="1.0" encoding="utf-8" ?>   
    <selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <!-- 默认时的背景图片-->  
      <item android:drawable="@drawable/pic1" />    
    <!-- 没有焦点时的背景图片 -->  
      <item android:state_window_focused="false"   
            android:drawable="@drawable/pic1" />   
    <!-- 非触摸模式下获得焦点并单击时的背景图片 -->  
      <item android:state_focused="true" android:state_pressed="true"   android:drawable= "@drawable/pic2" /> 
    <!-- 触摸模式下单击时的背景图片-->  
    <item android:state_focused="false" android:state_pressed="true"   android:drawable="@drawable/pic3" />  
    <!--选中时的图片背景-->  
      <item android:state_selected="true"   android:drawable="@drawable/pic4" />   
    <!--获得焦点时的图片背景-->  
      <item android:state_focused="true"   android:drawable="@drawable/pic5" />   
    </selector>
    

    三,使用细则

    Item顺序是有讲究的,条件限定越细致,则应该放到前面。比如如下代码,如果把1,2行和3,4行的item交换,那么pressed的就永远无法触发了,因为有item已经满足条件返回了。可以理解为代码中的if语句。

    <?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
        <item android:state_enabled="true" android:state_checked="true" android:state_pressed="true"
              android:drawable="@drawable/enabled_on_pressed" />
        <item android:state_enabled="true" android:state_checked="false" android:state_pressed="true"
              android:drawable="@drawable/enabled_off_pressed" />
        <item android:state_enabled="true" android:state_checked="true"
              android:drawable="@drawable/enabled_on" />
        <item android:state_enabled="true"  android:state_checked="false"
              android:drawable="@drawable/enabled_off" />
        <item android:state_enabled="false" android:state_checked="true"
              android:drawable="@drawable/disabled_on" />
        <item android:state_enabled="false"  android:state_checked="false"
              android:drawable="@drawable/disabled_off" />              
    </selector>
    

    四,使用方法

    三种方法可以来引用创建的文件:

    (1)在ListView中添加如下属性代码

    1. android:listSelector="@drawable/mylist_view"  


    (2)在ListView的item界面中添加如下属性代码

    1. android:background="@drawable/mylist_view"  


    (3)利用JAVA代码直接编写

      1. Drawable drawable = getResources().getDrawable(R.drawable.mylist_view);   
      2. listView.setSelector(drawable); 
  • 相关阅读:
    Linux下C程序的反汇编【转】
    数据在内存中的存储方式( Big Endian和Little Endian的区别 )(x86系列则采用little endian方式存储数据)【转】
    linux arm的存储分布那些事之一【转】
    linux arm mmu基础【转】
    linux 进程内存解析【转】
    如何更方便的查看Linux内核代码的更新记录【转】
    设备树解析【转】
    分析内核源码,设备树【转】
     Meltdown论文翻译【转】
    device tree --- #address-cells and #size-cells property【转】
  • 原文地址:https://www.cnblogs.com/zhangxia/p/5101486.html
Copyright © 2011-2022 走看看