selector的使用

1.用selector可以让控件根据状态的不同呈现不同的形态。例如按钮选中、不选中,显示不同的背景图片。selector的实现如下:

a) 定义一个selector文件,放在drawable目录下,为.xml格式。个图片资源也要准备好放在drawable目录下。

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_focused="true"
        android:drawable="@drawable/mic1"/>
    <item android:state_pressed="true"
        android:drawable="@drawable/mic1"/>
    <item android:state_selected="true"
        android:drawable="@drawable/mic1"/>
    <item android:drawable="@drawable/mic2"/>
</selector>

b) 使用定义好的selector。
在界面的layout里面,定义button控件并使用selector

 <Button
        android:layout_width="50dp"
        android:layout_height="60dp"
        android:id="@+id/button2"
        android:layout_margin="20dp"
        android:focusable="true"
        android:clickable="true"
        android:background="@drawable/my_selector"
        android:cacheColorHint="@android:color/transparent"/>

这样selector就和控件关联了。

2.如果有多个这样的selector,文件会比较多,这时候也可以用java代码实现,用StateListDrawable类。

StateListDrawable drawable = new StateListDrawable();
        //Non focused states
        drawable.addState(new int[]{-android.R.attr.state_focused, -android.R.attr.state_selected, -android.R.attr.state_pressed},
                getResources().getDrawable(R.drawable.pic1));
        drawable.addState(new int[]{-android.R.attr.state_focused, android.R.attr.state_selected, -android.R.attr.state_pressed},
                getResources().getDrawable(R.drawable.pic2));
        //Focused states
        drawable.addState(new int[]{android.R.attr.state_focused,-android.R.attr.state_selected, -android.R.attr.state_pressed},
                getResources().getDrawable(R.drawable.pic2));
        drawable.addState(new int[]{android.R.attr.state_focused,android.R.attr.state_selected, -android.R.attr.state_pressed},
                getResources().getDrawable(R.drawable.pic2));
        //Pressed
        drawable.addState(new int[]{android.R.attr.state_selected, android.R.attr.state_pressed},
                getResources().getDrawable(R.drawable.pic2));
        drawable.addState(new int[]{android.R.attr.state_pressed},
                getResources().getDrawable(R.drawable.pic2));
        TextView textView = (TextView) findViewById(R.id.TextView_title);
        textView.setCompoundDrawablesWithIntrinsicBounds(null, drawable, null, null);
        //此时用的是textView控件

记得设置textview的属性为可点击的、可聚焦的:

        android:focusable="true"
        android:clickable="true"

3.控件的属性总结:
pressed: 按下后未松开前是pressed,表示按下。
focused: 松开后当前对象获得焦点,是focused,同一时刻只能focus一个控件。
selected: 表示选中状态,同一时刻可以多个控件共同拥有selected状态。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值