我希望imagebutton有两种状态i)正常ii)触摸(或点击)。
我在 imagebutton 背景中设置了普通图片,我正在尝试更改 图片(已按下)来自 onclick 方法,但它没有改变。
我希望如果我按下图像按钮,那么图像应该从正常变为按下,直到我按下其他按钮但不会发生。
有人可以向我建议如何使用选择器或在运行时执行此操作?
这是我的imagebuttonpanel代码。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="horizontal"
android:gravity="bottom"
android:id="@+id/buttonpanel">
<ImageButton android:id="@+id/buttonhome"
android:layout_width="80dp"
android:layout_height="36dp"
android:focusable="true"
android:background="@drawable/homeselector">
</ImageButton>
<ImageButton android:id="@+id/buttonsearch"
android:layout_height="36dp"
android:layout_width="80dp"
android:background="@drawable/searchselector"
android:focusable="true">
</ImageButton>>
<ImageButton android:id="@+id/buttonreg"
android:layout_height="36dp"
android:layout_width="80dp"
android:background="@drawable/registerselector"
android:focusable="true">
</ImageButton>>
<ImageButton android:id="@+id/buttonlogin"
android:layout_height="36dp"
android:layout_width="80dp"
android:background="@drawable/loginselector"
android:focusable="true">
</ImageButton>
</LinearLayout>
我的选择器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/homehover"
/> <item android:state_focused="true" android:drawable="@drawable/homehover"
/> <item android:drawable="@drawable/home" /> <item android:state_window_focused="true"
android:drawable="@drawable/homehover" /> -->
<item android:state_enabled="false" android:drawable="@drawable/homehover" />
<item android:state_pressed="true" android:state_enabled="true"
android:drawable="@drawable/homehover" />
<item android:state_focused="true" android:state_enabled="true"
android:drawable="@drawable/homehover" />
<item android:state_enabled="true" android:drawable="@drawable/home" />
</selector>
我还尝试在ontouch和onclick事件上更改图像资源,但它没有帮助。
答案 0 :(得分:221)
在drawable中创建一个xml文件,如下所示:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:state_enabled="false"
android:drawable="@drawable/btn_sendemail_disable" />
<item
android:state_pressed="true"
android:state_enabled="true"
android:drawable="@drawable/btn_send_email_click" />
<item
android:state_focused="true"
android:state_enabled="true"
android:drawable="@drawable/btn_sendemail_roll" />
<item
android:state_enabled="true"
android:drawable="@drawable/btn_sendemail" />
</selector>
然后相应地设置图片,然后将此xml设置为imageButton
的背景。
答案 1 :(得分:15)
试试这个
btn.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
btn.setBackgroundResource(R.drawable.icon);
}
});
答案 2 :(得分:8)
您可以尝试以下代码对您有用,
((ImageView)findViewById(R.id.ImageViewButton)).setOnTouchListener(new View.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
if(event.getAction() == MotionEvent.ACTION_DOWN)
((ImageView) v.findViewById(R.id.ImageViewButton)).setImageResource(R.drawable.image_over);
if(event.getAction() == MotionEvent.ACTION_UP)
((ImageView) v.findViewById(R.id.ImageViewButton)).setImageResource(R.drawable.image_normal);
return false;
}
});
答案 3 :(得分:8)
MHH。我得到了另一个帮助我的解决方案,因为我只有两个不同的状态:
在我的.xml中,我像这样定义ImageButton:
<ImageButton
android:id="@+id/imageButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/selector" />
相应的选择器文件如下所示:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/ico_100_checked" android:state_selected="true"/>
<item android:drawable="@drawable/ico_100_unchecked"/>
</selector>
在我的onCreate中,我打电话给:
final ImageButton ib = (ImageButton) value.findViewById(R.id.imageButton);
OnClickListener ocl =new OnClickListener() {
@Override
public void onClick(View button) {
if (button.isSelected()){
button.setSelected(false);
} else {
ib.setSelected(false);
//put all the other buttons you might want to disable here...
button.setSelected(true);
}
}
};
ib.setOnClickListener(ocl);
//add ocl to all the other buttons
完成。希望这可以帮助。我花了一段时间才弄明白。
答案 4 :(得分:3)
我认为你的问题不是选择器文件。
你必须添加
<imagebutton ..
android:clickable="true"
/>
到您的图片按钮。
默认情况下, onClick在listitem级别处理(父级)。并且imageButtons没有收到onClick。
当您添加上述属性时,图像按钮将接收该事件,并且将使用选择器。
选中此POST,其中解释了相同的复选框。
答案 5 :(得分:1)
如果你想要按下图像按钮,那么图像应该从正常变为按下
但我最好的方法是自定义RadioButton并在组中使用它们。我已经看到了一个例子。 对不起,我不记得那个链接了。
但如果你想避免这种情况。 您需要将它添加到selector.xml
一旦完成。刚到你的代码并添加这个
public void onClick ( View v ) {
myImageButton.setSelected ( true ) ;
}
您将看到结果。但你必须管理最近按下按钮的状态。这样你就可以设置
myOLDImageButton.setSelected ( false ) ;
我建议你把所有按钮引用放在一个数组中。
答案 6 :(得分:0)
您要做的更多是分段按钮而不是图像按钮列表。
此处http://blog.bookworm.at/2010/10/segmented-controls-in-android.html是如何执行此操作的示例。基本的想法是自定义RadioButton而不是ImageButton,因为RadioButton将具有您需要的已检查状态
答案 7 :(得分:0)
你试过CompoundButton
吗? CompoundButton具有完全符合您需求的可检查属性。用这些替换ImageButtons。
<CompoundButton android:id="@+id/buttonhome"
android:layout_width="80dp"
android:layout_height="36dp"
android:background="@drawable/homeselector"/>
将选择器xml更改为以下内容。可能需要进行一些修改,但请务必使用state_checked
代替state_pressed
。
<?xml version="1.0" encoding="UTF-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_enabled="false" android:drawable="@drawable/homehover" />
<item android:state_checked="true" android:state_enabled="true"
android:drawable="@drawable/homehover" />
<item android:state_focused="true" android:state_enabled="true"
android:drawable="@drawable/homehover" />
<item android:state_enabled="true" android:drawable="@drawable/home" />
</selector>
在CompoundButton.OnCheckedChangeListener
中,您需要根据自己的条件检查和取消选中其他内容。
mButton1.setOnCheckedChangeListener(new OnCheckedChangeListener() {
public void onCheckedChanged (CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
// Uncheck others.
}
}
});
同样为每个按钮设置OnCheckedChangeListener
,在选中时将取消选中其他按钮。希望这有助于。
答案 8 :(得分:0)
@ ingsaurabh的回答是如果你使用onClick甚至是要走的路。但是,如果您使用的是onTouch事件,则可以使用view.setPressed()
选择不同的背景(仍然与@ ingsaurabh的示例相同)。
有关详细信息,请参阅以下内容:"Press and hold" button on Android needs to change states (custom XML selector) using onTouchListener
答案 9 :(得分:0)
您可以在res / drawable
中创建选择器文件例如: RES /抽拉/ selector_button.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/btn_disabled" android:state_enabled="false" />
<item android:drawable="@drawable/btn_enabled" />
</selector>
和布局活动,片段等
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/selector_bg_rectangle_black"/>