selector

一.实现selector需要创建xml文件,同时drawable任意像素的目录下要放涉及到图片

其基本常用属性

android:state_selected--------选中
android:state_focused--------获得焦点
android:state_pressed--------点击
android:state_enabled--------设置是否响应事件

示例:

<?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>

.使用xml文件:

1.方法一:listview中配置android:listSelector="@drawable/xxx
或者在listviewitem中添加属性android
background="@drawable/xxx"

2.方法二:Drawable drawable = getResources().getDrawable(R.drawable.xxx);  
       ListView.setSelector(drawable);
但是这样会出现列表有时候为黑的情况,需要加上:android:cacheColorHint="@android:color/transparent"
使其透明。

三:更多属性

android:drawable 放一个drawable资源
android:state_pressed 是否按下,如一个按钮触摸或者点击。
android:state_focused 是否取得焦点,比如用户选择了一个文本框。
android:state_hovered 光标是否悬停,通常与focused state相同,它是4.0的新特性
android:state_selected 被选中,它与focus state并不完全一样,如一个list view 被选中的时候,它里面的各个子组件可能通过方向键,被选中了。
android:state_checkable 组件是否能被check。如:RadioButton是可以被check的。
android:state_checked 被checked了,如:一个RadioButton可以被check了。
android:state_enabled 能够接受触摸或者点击事件
android:state_activated 被激活(这个麻烦举个例子,不是特明白)
android:state_window_focused 应用程序是否在前台,当有通知栏被拉下来或者一个对话框弹出的时候应用程序就不在前台了


示例:以下一些稍微复杂的示例
drawable/button_font.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_selected="true" android:color="#FFF" />
    <item android:state_focused="true" android:color="#FFF" />
    <item android:state_pressed="true" android:color="#FFF" />
    <item android:color="#000" />
</selector>
Button
还可以实现更复杂的效果,例如渐变
drawable/button_color.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">        
<item android:state_pressed="true">//
定义当button 处于pressed 状态时的形态。 
      <shape>

       <gradient  android:startColor="#8600ff" /> 

       <stroke   android:width="2dp" android:color="#000000" /> 
       <corners android:radius="5dp" />  
       <padding android:left="10dp" android:top="10dp"  android:bottom="10dp" android:right="10dp"/>  
      </shape> 
</item> 
<item android:state_focused="true">//
定义当button获得 focus时的形态 
   <shape> 
    <gradient android:startColor="#eac100"/> 
    <stroke android:width="2dp" android:color="#333333"  color="#ffffff"/> 
    <corners android:radius="8dp" />   
    <padding android:left="10dp" android:top="10dp" android:bottom="10dp" android:right="10dp"/>        </shape> 
 </item>
</selector> 
最后,需要在包含 buttonxml文件里添加两项。例如main.xml 文件,需要在<Button />里加两项android
focusable="true" android:background="@drawable/button_color"

<?xml version="1.0" encoding="UTF-8"?>
<selector
  xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_window_focused="false" android:state_enabled="true" android:state_checked="true" android:drawable="@drawable/btn_check_on" />
    <item android:state_window_focused="false" android:state_enabled="true" android:state_checked="false" android:drawable="@drawable/btn_check_off" />
    <item android:state_enabled="true" android:state_checked="true" android:state_pressed="true" android:drawable="@drawable/btn_check_on_pressed" />
    <item android:state_enabled="true" android:state_checked="false" android:state_pressed="true" android:drawable="@drawable/btn_check_off_pressed" />
    <item android:state_focused="true" android:state_enabled="true" android:state_checked="true" android:drawable="@drawable/btn_check_on_selected" />
    <item android:state_focused="true" android:state_enabled="true" android:state_checked="false" android:drawable="@drawable/btn_check_off_selected" />
    <item android:state_enabled="true" android:state_checked="false" android:drawable="@drawable/btn_check_off" />
    <item android:state_enabled="true" android:state_checked="true" android:drawable="@drawable/btn_check_on" />
</selector>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值