如何设置不同状态的图像按钮backgroundimage?

Hit*_*dra 79 android android-layout

我希望图像按钮有两种状态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>
Run Code Online (Sandbox Code Playgroud)

我的选择器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> 
Run Code Online (Sandbox Code Playgroud)

我也尝试在ontouch和onclick事件上更改图像资源,但它没有帮助.

ing*_*abh 222

在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>
Run Code Online (Sandbox Code Playgroud)

并相应地设置图像,然后将此xml设置为您的背景imageButton.

  • 正确.这将被称为Selector XMLs (11认同)
  • @Hitendra:我想操作已经知道了.问题可以解释为选择器未被调用的原因. (4认同)
  • 这适用于通常的`Button`,但不适用于`ImageButton`.这也适用于`ImageButton`的`android:src`属性,但不适用于`android:background.你和OP的选择器之间有什么区别(格式和drawables的名字除外)?我错过了什么吗? (4认同)

Par*_*han 15

试试这个

btn.setOnClickListener(new OnClickListener() {
    public void onClick(View v) {
        btn.setBackgroundResource(R.drawable.icon);
    }
});
Run Code Online (Sandbox Code Playgroud)


Ven*_*ddy 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;
    }
});
Run Code Online (Sandbox Code Playgroud)

  • -1问题明确说明使用选择器,而不是java代码 (4认同)

小智 8

MHH.我得到了另一个帮助我的解决方案,因为我只有两个不同的状态:

  • 要么没有点击该项目
  • 或点击它,因此它将突出显示

在我的.xml中,我像这样定义ImageButton:

 <ImageButton
    android:id="@+id/imageButton"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@drawable/selector" />
Run Code Online (Sandbox Code Playgroud)

相应的选择器文件如下所示:

<?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>
Run Code Online (Sandbox Code Playgroud)

在我的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
Run Code Online (Sandbox Code Playgroud)

完成.希望这可以帮助.我花了一段时间才弄明白.