ImageButton的选定状态

时间:2014-01-25 18:58:43

标签: android imagebutton

我有像下面的图像按钮。

<ImageButton
        android:id="@+id/imagebutton"
        android:layout_width="250dp"
        android:layout_height="100dp" 

        android:background="@drawable/perm_group_calendar"/>

perm_group_calendar.xml

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

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


    <item android:state_selected="true" android:drawable="@drawable/perm_group_calendar_selected" />
    <item android:drawable="@drawable/perm_group_calendar_normal" />    
</selector>

所选状态本身不起作用。我从这个SO中找到了答案

Android ImageButton with a selected state?

我使用了以下代码。现在它有效。

 imageButton.setOnClickListener(new OnClickListener() {

           public void onClick(View button) {
               if (button.isSelected()){
                   button.setSelected(false); 
                   //...Handle toggle off
               } else {
                   button.setSelected(true);
                   //...Handled toggle on
               }
           }

       }); 

为什么我们要切换选定的状态?

2 个答案:

答案 0 :(得分:2)

我认为您应该在可绘制的XML文件中执行以下操作:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_selected="true" android:drawable="@drawable/aaaa" />
    <item android:state_pressed="true" android:drawable="@drawable/aaaa"></item>
    <item android:drawable="@drawable/ic_launcher" />    
</selector>

和你的ImageButton如下:

<ImageButton
        android:id="@+id/imageView"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:background="#123456"
        android:padding="10dp"
        android:scaleType="fitXY"
        android:src="@drawable/drawableFile" />

你应该添加android:state_pressed =“true”,这应该是按下状态的技巧。

正如RomianGuy在answer中提到的那样:

当使用键盘/ dpad /轨迹球/等选择项目时,使用

state_selected。 所以我认为这就是你必须切换状态的原因。

希望有助于此。

答案 1 :(得分:1)

因为选择的状态不是由ImageButton自动显示的,因此 - 通常(与人工相对) - 仅显示正常按下< / strong>状态(不确定聚焦状态,但它应该)。

您可以使用自定义 ToggleButton(或Switch或CheckBox)。

无论如何,对我而言,你的解决方案看起来并不那么糟糕。