1

我正在尝试做一个简单的选择器。

这是我的选择器 xml 代码,它被称为“butt.xml”:

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

<item android:drawable="@drawable/btn_activate_on" android:state_pressed="true"/>
<item android:drawable="@drawable/btn_activate_off" android:state_pressed="false"/> <!-- default -->

这就是布局:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >

<ImageButton
    android:id="@+id/imageView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_centerHorizontal="true"
    android:layout_marginBottom="42dp"
    android:src="@drawable/butt" />

这就是代码:

ImageButton ib;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    ib = (ImageButton) findViewById(R.id.imageView1);
    ib.setOnClickListener(this);
}

@Override
public void onClick(View v) {
    ib.setSelected(true);

}

我的问题是状态没有改变,当我按住按钮时。它正在将其图像更改为"selected"我按下时的图像。但是当我松开手指时,它又回到了原来的"not sellected"状态。

为什么呢?我怎样才能让它保持在“选定”模式?

4

3 回答 3

1

在您的选择器 butt.xml 中使用它

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

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

</selector>

你也可以ib.setSelected(true);从你的onClick(). 它会被照顾的。
更新

<ImageButton
    android:id="@+id/imageView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_centerHorizontal="true"
    android:layout_marginBottom="42dp"
    android:background="@drawable/butt" />

您需要设置背景而不是设置 src。

于 2012-11-05T10:01:40.057 回答
1

如果您需要将按钮的状态显示为选中或未选中,则无需使用选择器。

相反,您必须使用代码 setBackground() 并通过管理标志来检查您的按钮当前是否被选中。

if(flag)
    btn.setDrawableBackground(R.id.btn_activate_on)
else
    btn.setDrawableBackground(R.id.btn_activate_off)

如果要显示对状态的影响,请创建两个具有相反状态的选择器。

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

另一个是

<item android:state_pressed="true"
    android:drawable="@drawable/btn_activate_off"></item>
<item android:drawable="@drawable/btn_activate_on"></item>
于 2012-11-05T10:05:18.250 回答
1

按钮不应该用于这样的切换 - 而是使用复选框。

按钮的“选中”意味着用户当前的手指放在按钮上,因此当用户抬起手指时,它将不再被选中。

于 2013-07-31T01:59:29.093 回答