安卓ImageButton - 如何在点击按钮时更改图像?

5
如果按钮被点击,我想打开wifi并更改ImageButton的图像,但我不知道如何更改它。
我也尝试过来自如何在每次单击时更改按钮的图像?,但它没有起作用。
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即可。 但是:当我启动应用程序时,他会在第二次更改图片。之后,每次都会更改。


1
由于您在Java代码中使用了onclicklisten,因此请从XML或Java类中删除android:onClick =“turnOffWifiDemo”。 - Meghna
@Meghna 谢谢!但是你知道我怎么用 onClick 方法来实现吗(我不想使用 onClickListener)? - Ali
当您使用选择器方式时,您的输出是什么? - CodePro_NotYet
请展示您在类中放置setOnClickListener()代码的位置。它在哪个函数内?我认为您没有将其放入任何方法中。如果是这样,请尝试将其放入一个方法中。 - CodePro_NotYet
@CodePro_NotYet 你是不是想把 setOnClickListener()方法放在一个 onClick(View view)方法中? - Ali
显示剩余5条评论
5个回答

4

这段代码对我有效,测试一下吧。

   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);
            }
        }
    });

你好...假设我正在执行这个活动。用户点击发光图像...如果用户从一个活动转到另一个活动,再次回到活动一,按钮会保持发光吗? - Wini

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
@Ali,正如你在问题中提到的那样,在Java代码中,我正在使用imagebutton。 - Badrul

0

你可以像这样使用togglebutton

<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);
            }
        }
});

0
你可以定义一个布尔标志并仅更改项目的可见性。 描述: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;
    }
}

0

我已经修改了它,对于开/关可能会有所帮助

<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
@Badrul Ali 问我如何在 XML 中实现 onclick,所以我发布了这段代码。 - Meghna
啊!我不知怎么忽略了这个评论,你本可以编辑他的问题,因为在这里发布的代码与讨论主题无关。这种事情应该避免 :) - Badrul
你为什么使用了两个ImageButtons? - Ali

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接