单击图像按钮时,Selector.xml不起作用

时间:2011-10-25 04:41:49

标签: android css-selectors imagebutton

当我点击它时,我使用以下选择器来更改图像按钮的图像。但这在大多数时候都不起作用。只有几个按钮才有效。不知道原因是什么

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

    <selector xmlns:android="http://schemas.android.com/apk/res/android">
        <!-- Button Pressed -->
        <item android:state_focused="true" android:state_pressed="true" 
    android:drawable="@drawable/mapiconover"/>
</selector>

在按钮中,

我是这样做的,

  <ImageButton 
    android:layout_width="wrap_content" android:layout_height="wrap_content"
    android:id="@+id/btnMap" android:layout_centerInParent="true"  android:src="@drawable/mapselector"
    android:background="@drawable/map" android:scaleType="fitXY"
    android:layout_alignParentBottom="true">
</ImageButton>

但点击时静止图像不会改变。

对此有何猜测?

3 个答案:

答案 0 :(得分:9)

你在ImageButton xml中创建了这样的东西

使用像这样的按钮图像创建xml文件

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

将该xml文件添加为IMageButton的背景

<ImageButton                 
    android:layout_height="50px" 
    android:layout_width="50px" 
    android:id="@+id/settings" 
    android:background="@drawable/settings_button" //setting_button in
                                                         the xml file            
    android:text="Settings"/>

答案 1 :(得分:0)

不确定这是否有效,但您可以尝试将选择器更改为:

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

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- Button Pressed -->
    <item android:state_focused="true" android:state_pressed="true" 
     android:drawable="@drawable/mapiconover"/>
    <item android:drawable="@drawable/map" />

</selector>

您的图片按钮:

  <ImageButton 
    android:layout_width="wrap_content" android:layout_height="wrap_content"
    android:id="@+id/btnMap" 
    android:layout_centerInParent="true"  
     android:background="@drawable/mapselector"
     android:scaleType="fitXY"
    android:layout_alignParentBottom="true">
</ImageButton>

答案 2 :(得分:0)

我有同样的问题。对我来说是因为

  

android:state_xxxx

冲突。它通过阐明启用和按下之间的条件来解决。我使用以下代码来获取印刷机和正常状态之间的不同状态:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_enabled="true" android:state_pressed="false" >
        <shape
            android:shape="rectangle">
            <gradient android:startColor="#1094ff"
                android:endColor="#7eb6e3"
                android:angle="270" />
            <corners android:radius="@dimen/fab_margin" />
            <stroke android:width="2px"
                android:color="#505050" />
        </shape>
    </item>
    <item android:state_pressed="true" android:state_enabled="true">
        <shape
            android:shape="rectangle">
            <gradient android:startColor="#0075d4"
                android:endColor="#0070cb"
                android:angle="270" />
            <corners android:radius="@dimen/fab_margin" />
            <stroke android:width="2px"
                android:color="#ff0000" />
        </shape>
    </item>
    <item android:state_enabled="false" >
        <shape
            android:shape="rectangle">
            <gradient android:startColor="#b9b9b9"
                android:endColor="#848484"
                android:angle="270" />
            <corners android:radius="@dimen/fab_margin" />
            <stroke android:width="2px"
                android:color="#505050" />
        </shape>
    </item>
</selector>

此示例对不同状态使用不同的渐变和笔触。您也可以使用可绘制对象来代替。只需在可绘制文件夹中创建一个类似于“ mybutton.xml”的文件。然后像这样设置按钮的background属性:

  

android:background =“ @ drawable / mybutton”

希望对您有所帮助。