調整する値が最大値または最小値に達したときに無効にするボタンをプログラムによっていくつか生成しています。 (つまり、最大に達すると「増加」ボタンが無効になり、最小に達すると「減少」ボタンが無効になります)無効にすることに加えて、視覚的にボタンの状態を「押した」に設定します制限値に達してボタンが機能しなくなったことを示します。無効なボタンがタッチされたときに押された状態を失う
「増加」ボタンの私のボタンonClickListenerは、次のようになります。
increase.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// do some stuff
// here I enable the corresponding 'decrease' button because once you increase you can then decrease
setEnabled(decrease, true);
// if the maximum value is obtained, I disable the 'increase' button because you can't go higher
if (value == maximum) {
setEnabled(increase, false);
}
}
});
対応する「減少」onClickListenersが類似しています。
これらのボタンは、自分の状態を変更しているので、私は、ユーザーの指が(https://stackoverflow.com/a/28788780/852795を参照)邪魔にならないように、小さな遅延後Button.setEnabled()
とButton.setPressed()
を調整するHandler
を使用する必要があります。一つの小さな例外を除いて、
private void setEnabled(final Button b, final boolean set) {
Handler refresh = new Handler(Looper.getMainLooper());
refresh.postDelayed(new Runnable() {
@Override
public void run() {
b.setEnabled(set);
b.setPressed(!set);
}
}, 250); // delayed post required to make pressed button accept setPressed()
}
すべてが素晴らしい作品:ここでは上記で使用されてsetEnabled(final Button b, final boolean set)
方法があるユーザーがボタンが無効になり、最大に達するために十分な時間「増加」ボタンを押すと「押されたら'状態はtrueに設定されますが、もう一度押すと、' pressed '状態はオフになります。機能的には、ボタンは無効です。私はonClickHandlerが呼び出されないので、これを知っています。なぜ私のボタンは「押した」状態を失っているのですか?これをどうやって止めることができますか?
更新:https://stackoverflow.com/a/8693444/852795を見ては、私が押された状態をオフにするのタッチ「インターセプト」するためにonTouchListener()
に差し込むてみました。しかし、ボタンも無効になっているので、これも呼び出されません。
つまり私は、ボタンが無効になっているときに押された状態を使用することができるとは思いません。 –
これを処理する信頼性の高い方法は、ボタンの背景をStateListDrawableに変更し、 'disabled'状態を 'pressed'状態と同じに設定することです。 https://developer.android.com/guide/topics/resources/drawable-resource.html#StateList – Egg
ボタンは無効になっており、押された状態は「true」に設定されていますが、すべて正常に動作します。もう一度押すと(無効の間!)、押した状態はオフになります。 –