我正在尝试做一个简单的选择器。
这是我的选择器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"
状态。
为什么会这样?如何让它保持“选定”模式?
答案 0 :(得分: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。
答案 1 :(得分: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>
答案 2 :(得分:1)
不应该使用按钮进行切换 - 请改用复选框。
按钮的“已选择”表示用户当前将手指放在按钮上,因此当用户抬起手指时,它将不再被选中。