如何设置图像buttonbackgroundimage为不同的状态?
我想要两个状态的图像button我)正常ii)触摸(或点击)。
我已经在imagebutton背景中设置正常的图像,我试图改变 图像(按)从onclick方法,但它不会改变。
我想,如果我按下图像button,然后图像应该从正常改变按下,直到我按其他button,但没有发生 。
任何人都可以向我build议如何使用select器或在运行时间 ?
这是我的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>
和我的select器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事件上更改图片资源,但这并没有帮助。
在你的drawable中创build一个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
背景。
尝试这个
btn.setOnClickListener(new OnClickListener() { public void onClick(View v) { btn.setBackgroundResource(R.drawable.icon); } });
MHH。 我得到了另一个帮助我的解决scheme,因为我只有两种不同的状态:
- 该项目不被点击
- 或者被点击,所以会突出显示
在我的.xml中我像这样定义ImageButton:
<ImageButton android:id="@+id/imageButton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/selector" />
相应的select器文件如下所示:
<?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
完成。 希望这可以帮助。 花了我一段时间才弄清楚。
嗨尝试下面的代码它会对你有用,
((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; } });
我认为你的问题不是select器文件。
你必须补充
<imagebutton .. android:clickable="true" />
到你的图像button。
默认情况下, onClick是在listitem级别 (父级 )处理的。 和imageButtons不接收onClick。
当你添加上面的属性时,图像button将会收到事件,select器将被使用。
检查这个解释相同的POSTcheckbox。
如果你想按下图像button,那么图像应该从正常变为按下
但我最好的办法是自定义RadioButton并在一个组中使用它们。 我看到了一个例子。 对不起,我不记得那个链接。
但如果你想避免这一点。 你需要把这个添加到你的selector.xml中
一旦完成。 刚刚到你的代码,并添加此
public void onClick ( View v ) { myImageButton.setSelected ( true ) ; }
你会看到结果。 但是你必须pipe理最近按下button的状态。 所以你可以设置
myOLDImageButton.setSelected ( false ) ;
我build议你把所有的button引用在一个数组中。
你想要做的是比imagebutton列表更多的分段button。
这里http://blog.bookworm.at/2010/10/segmented-controls-in-android.html是一个如何这样做的例子。; 基本的想法是自定义RadioButton,而不是ImageButton,因为RadioButton将有你需要的检查状态
你有没有尝试过CompoundButton
? CompoundButton的checkable属性完全符合您的需求。 用这些replaceImageButtons。
<CompoundButton android:id="@+id/buttonhome" android:layout_width="80dp" android:layout_height="36dp" android:background="@drawable/homeselector"/>
将select器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
设置为每个button, OnCheckedChangeListener
中它时将取消选中其他button。 希望这可以帮助。
即使您使用onClick,@ ingsaurabh的答案也是如此。 但是,如果您正在使用onTouch事件,则可以使用view.setPressed()
select不同的背景(仍然与@ingsaurabh的示例相同view.setPressed()
。
有关更多详细信息,请参阅以下内容: Android上的“按住”button需要使用onTouchListener更改状态(自定义XMLselect器)
你可以在res / drawable中创buildselect器文件
例如:res / drawable / 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"/>