Я хочу создать кнопку, которая становится красной при первом нажатии и возвращается к обычному серому цвету при втором (и выполняет некоторые действия, такие как удаление файла). Это предназначено для подтверждения того, что пользователь действительно хочет начать действие удаления.
Для этого я меняю фоновый рисунок на LayerDrawable с дополнительным ColorDrawable поверх рисуемого по умолчанию. Затем альфа ColorDrawable устанавливается на 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();
}
});
}
}