Чтобы сделать это немного понятнее, если вам просто нужна кнопка с двумя состояниями:
Вам не нужно свое button.xml
. Вы можете работать с обычным Android.
button.setPressed(true)
не будет работать, если вы нажмете кнопку, потому что Android сбросит его, как только вы отпустите кнопку. Попробуйте установить другие кнопки setPressed
, чтобы увидеть эффект.
Это означает, что для использования на той же кнопке она должна быть установлена с задержкой. Вот рабочий пример. Конечно, упомянутый подход (по длинному идентификатору 18 ..) к изменению фона тоже работает.
private final Handler mHandler = new Handler();
rootView.findViewById(R.id.yourButton).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
boolean pressed = false;
if (v.getTag() instanceof Boolean)
pressed = (boolean) v.getTag();
final boolean newPressed = !pressed;
// setTag to store state
v.setTag(newPressed);
final View vRun = v;
Runnable run = new Runnable() {
@Override
public void run() {
vRun.setPressed(newPressed);
}
};
mHandler.post(run);
// mHandler.postDelayed(run, 5);
}
});