以编程方式更改按钮背景可绘制onClick

And*_*mes 8 android background button toggle drawable

我正在尝试切换按钮的背景drawable,以便当用户单击按钮时,其背景会发生变化,当用户再次单击该按钮时,其背景将返回默认值.这是我的代码:

public void Favorites(View V) {
  Button star = (Button) findViewById(R.id.buttonStar);
  if(star.getBackground().equals(R.drawable.btn_star_off)) {
    star.setBackgroundResource(R.drawable.btn_star_on);
  } else {               
    star.setBackgroundResource(R.drawable.btn_star_off);
  }
}
Run Code Online (Sandbox Code Playgroud)

我很确定这不是你如何使用drawables与if语句.有人可以建议一种方法吗?

li2*_*li2 16

private boolean isButtonClicked = false; // You should add a boolean flag to record the button on/off state

protected void onCreate(Bundle savedInstanceState) {
    ......
    Button star = (Button) findViewById(R.id.buttonStar);
    star.setOnClickListener(new OnClickListener() { // Then you should add add click listener for your button.
        @Override
        public void onClick(View v) {
            if (v.getId() == R.id.buttonStar) {
                isButtonClicked = !isButtonClicked; // toggle the boolean flag
                v.setBackgroundResource(isButtonClicked ? R.drawable.btn_star_on : R.drawable.btn_star_off);
            }
        }
    });
}
Run Code Online (Sandbox Code Playgroud)


nic*_*sso 7

您可以在drawable文件夹中创建一个xml.这个xml(你选择名字......让我们称之为"bg_button_star.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/btn_star_on" />
<item android:drawable="@drawable/btn_star_off" />
Run Code Online (Sandbox Code Playgroud)

然后,您必须将此可绘制文件分配给布局文件中的Button背景属性.

android:background="@drawable/bg_button_star"
Run Code Online (Sandbox Code Playgroud)

如果您想以编程方式执行此操作,那么您只需执行以下操作:

button.setBackgroundResource(R.drawable.bg_button_star);
Run Code Online (Sandbox Code Playgroud)

当用户第一次单击该按钮时,将Selected状态设置为"true".背景会相应变化.(反之为'假'选定状态).