关于selector中图片显示的一个小问题

时间:2022-02-28 17:36:48

1.     当我把bt_selector.xml文件写成如下形式:

 

<?xml version="1.0" encoding="utf-8"?>

<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:drawable="@drawable/img_default"/>

    <item android:drawable="@drawable/img_focus_press" android:state_pressed="true"/>

    <item android:drawable="@drawable/ic_launcher" android:state_focused="true"/>

</selector>

 

运行时发现无论怎么点击button,图案总是img_default,头疼啊~~~运行时发现无论怎么点击button,图案总是img_default,头疼啊~~~

 

2.解决方法:

将<item android:drawable="@drawable/img_default"/>这行代码放到最下端,即:

 

<?xml version="1.0" encoding="utf-8"?>

<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:drawable="@drawable/img_focus_press" android:state_pressed="true"/>

    <item android:drawable="@drawable/ic_launcher" android:state_focused="true"/>

    <item android:drawable="@drawable/img_default"/>

</selector>

 

再次运行时发现ok了~~~

 

3.原因:

安卓程序在读取selector.xml文件时,只会读取符合当前控件状态的第一个Item的内容。如果在selector下的第一个item中没有标注以上任何一个状态,那么它表示使用任何状态,将会在空间每次状态变化时只读取这个item的内容。所以,这样的默认的配置,一般都会置于最下面的item中。    

※上面这段话的意思就是说,比如你的代码是这样的:

 

<?xml version="1.0" encoding="utf-8"?>

<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:drawable="@drawable/ic_launcher00" android:state_focused="true"/>

    <item android:drawable="@drawable/img_focus_press" android:state_pressed="true"/>

    <item android:drawable="@drawable/ic_launcher01" android:state_focused="true"/>

    <item android:drawable="@drawable/img_default"/>

</selector>

 

代码中有两个focused时的状态,当你的button获得焦点时,程序只会选择第一个图片进行显示,而不会再读取第二个图片,最后显示的就是ic_launcher00。

 

※又比如你的代码是这样的:

 

<?xml version="1.0" encoding="utf-8"?>

<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:drawable="@drawable/img_default"/>

    <item android:drawable="@drawable/img_focus_press" android:state_pressed="true"/>

    <item android:drawable="@drawable/ic_launcher" android:state_focused="true"/>

</selector>

 

代码的第一行为默认状态时的图片,代码中没有标注任何状态(如按下、聚焦等),所以它就相当于任何状态,因此无论你怎样点击,它显示的都会是img_default。