【问题标题】:Android ImageButton - How to change the image when button is clicked?Android ImageButton - 单击按钮时如何更改图像?
【发布时间】:2014-07-15 10:29:53
【问题描述】:

如果按钮被点击了我想打开wifi并改变ImageButton的Image,但我不知道如何改变它

我也从 how to change the image of a button with every click? 尝试过这个,但它不起作用:

boolean isPressed=false
button.setOnClickListener(buttonListener);

OnClickListener buttonListener= new OnClickListener() {
@Override
public void onClick(View v) {
    if(isPressed){
    button.setBackgroundResource(R.drawable.icon1);
    }else{
    button.setBackgroundResource(R.drawable.icon2);
    }
    isPressed=!isPressed;
}};

当我编写上面的代码时,android studio 会显示: 无法解析符号setOnClickListener

我还创建了一个 button_wifi_selector xml,它看起来像这样:

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

<item android:drawable="@drawable/wifi_on"
    android:state_pressed="true" />
<item android:drawable="@drawable/ic_launcher"
    android:state_focused="true" />
<item android:drawable="@drawable/wifi" />

</selector>

在我的活动中我有这个

<ImageButton
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/imageButton_wifi"
    android:layout_below="@+id/toggleButton_wifi"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    android:onClick="turnOffWifiDemo"
    android:src="@drawable/button_wifi_selector" />

但它没有做,我想要什么 有人可以帮助我吗? 谢谢

编辑:它适用于第一个代码。我只需要从 xml 中的 ImageButton 中删除 onClick 但是:当我启动应用程序时,他第二次更改图片。之后他每次都会改变它

【问题讨论】:

  • 删除这一行 android:onClick="turnOffWifiDemo" 因为您在 java 代码中使用 onclicklisten 所以在 xml 或 java 类中使用
  • 您可以使用切换按钮代替 ImageButton
  • @Meghna 谢谢!但是你知道吗,我怎么能用 onClick 方法做到这一点(我不想使用 onClickListener)
  • 你使用选择器方式的输出是什么?
  • @CodePro_NotYet nothing....当你按下按钮时,他显示 wifi_on,如果你松开它,它显示 wifi

标签: android button sdk imagebutton


【解决方案1】:

这段代码对我有用;测试一下

   final ImageButton btnTest =(ImageButton) findViewById(R.id.btnexctract);
    btnTest.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            btnTest.setSelected(!btnextra.isPressed());

            if (btnTest.isPressed()) {
                btnextra.setImageResource(R.drawable.yourImage);
            }
            else {
                btnTest.setImageResource(R.drawable.yourImage2);
            }
        }
    });

【讨论】:

  • 你好...假设我正在执行这一项活动。用户单击以发光图像...如果用户从一项活动转到另一项活动并再次返回活动一项,按钮会保持发光状态吗?
【解决方案2】:

这就是你必须这样做的方式

选择器 xml:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item 
       android:state_selected="true" 
       android:drawable="@drawable/info_icon_solid_with_shadow" />
   <item 
       android:drawable="@drawable/info_icon_outline_with_shadow" />
</selector>

然后在java中:

//assign the image in code (or you can do this in your layout xml)
imageButton.setImageDrawable(getBaseContext().getResources().getDrawable(R.drawable....));

//set the click listener
imageButton.setOnClickListener(new OnClickListener() {

    public void onClick(View button) {
        //Set the button's appearance
        button.setSelected(!button.isSelected());

        if (button.isSelected()) {
            //Handle selected state change
        } 
        else {
            //Handle de-select state change
        }

    }

});

【讨论】:

  • 您使用的是哪种按钮?按钮/切换按钮/图像按钮?
  • @Ali 正如你在 java 代码中看到的那样,我正在使用 imagebutton,就像你在问题中提到的一样
【解决方案3】:

我已经修改过了,开/关可能对你有帮助

<FrameLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >
<ImageButton
            android:id="@+id/imageButton_wifi2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:onClick="clickEvent"
            android:visibility="invisible"
            android:src="@drawable/on" />
        <ImageButton
            android:id="@+id/imageButton_wifi1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:onClick="clickEvent"
            android:src="@drawable/off" />


    </FrameLayout>

就像你需要创建带有视图参数的方法

{ 
 c=false;
          im1=(ImageButton)findViewById(R.id.imageButton_wifi1);
          im2=(ImageButton)findViewById(R.id.imageButton_wifi2);
}

public void  clickEvent(View v)
{
//Code to implement 
if(c) {
    im2.setVisibility(View.VISIBLE);
    im1.setVisibility(View.INVISIBLE);
    c=false;
}
else {

    im1.setVisibility(View.VISIBLE);
    im2.setVisibility(View.INVISIBLE);

    c=true;
}

【讨论】:

  • 这如何解决他的问题?你能写出合适的代码吗?
  • @Badrul Ali 曾问我如何在 xml 中实现 onclick,所以我发布了这段代码
  • 啊!我不知何故忽略了评论,你可以做的是编辑他的问题,因为你在这里发布的代码与线程无关。应该避免这样的事情:)
  • 你为什么使用 2 个 ImageButtons?
【解决方案4】:

你可以像这样使用切换按钮

<ToggleButton
  android:id="@+id/toggleButton1"
  android:layout_width="74dp"
  android:layout_height="26dp"
  android:background="@drawable/toggle"
  android:checked="false"
  android:paddingRight="10dp"
  android:text="ON"
  android:textColor="#ffffff"
  android:textSize="13sp"
  android:textStyle="bold" />

在java文件中

final ToggleButton toggleButton=(ToggleButton)findViewById(R.id.toggleButton1);

toggleButton.setOnCheckedChangeListener(new OnCheckedChangeListener() {

        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            // TODO Auto-generated method stub

            if(isChecked){
                //
                toggleButton.setBackgroundResource(R.drawable.icon1);
            }else{
                //
                toggleButton.setBackgroundResource(R.drawable.icon2);
            }
        }
});

【讨论】:

    【解决方案5】:

    您可以定义一个布尔标志并仅更改项目的可见性。 说明:changeBack 是一个按钮。此代码用于更改图像 你的onClick不知道点击的是哪个id?

    private boolean bgcolor = false;
    
    public void onClick(View view) {
        switch(view.getId())
        {
            case R.id.changeBack:
    
            bgcolor = !bgcolor;
            if (bgcolor) {
                    imv.setVisibility(View.VISIBLE);
                    imv2.setVisibility(View.INVISIBLE);
            } 
            else {
                  imv2.setVisibility(View.VISIBLE);
                imv.setVisibility(View.INVISIBLE);
            }
    
            break;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-24
      • 1970-01-01
      • 2013-11-05
      • 1970-01-01
      • 1970-01-01
      • 2018-04-14
      相关资源
      最近更新 更多