我想创建一个按钮,该按钮在第一次按下时变为红色,第二次变为正常灰色(并执行一些操作,例如删除文件)。这是一种确认用户确实想要开始删除操作的方法。
为此,我将背景可绘制对象更改为 LayerDrawable,并在默认可绘制对象之上添加了一个额外的 ColorDrawable。然后根据状态将 ColorDrawable 的 alpha 设置为 0 或 255。
在第一次单击时切换为红色有效,但在第二次单击时,按钮变为黄色,因为它处于按下状态,而它应该回到正常的灰色。
演示代码:
package com.example.test;
import android.os.Bundle;
import android.app.Activity;
import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.LayerDrawable;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class TestActivity extends Activity {
Button button;
boolean showRed;
ColorDrawable cd;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
button = new Button(this);
button.setText("Delete");
// Following two lines don't matter, focus isn't the problem
button.setFocusable(false);
button.setFocusableInTouchMode(false);
cd = new ColorDrawable(0xffff0000);
cd.setAlpha(0);
button.setBackgroundDrawable(new LayerDrawable(new Drawable[] {
button.getBackground(), cd}));
setContentView(button);
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
showRed = !showRed;
if (showRed)
cd.setAlpha(255);
else
cd.setAlpha(0);
// Following line doesn't matter
button.setSelected(false);
button.getBackground().invalidateSelf();
}
});
}
}