我以編程方式生成了多個按鈕(某些用於增加值而另一些用於減小值),當它們調整的值達到最大值或最小值時,將禁用該按鈕。 (即,當達到最大值時,'增加'按鈕被禁用,而當達到最小值時,'減少'按鈕被禁用。)除了禁用,我還將按鈕狀態設置爲'按下'以便可視表示已達到極限值並且該按鈕不再起作用。已被禁用的按鈕在被觸摸時丟失按下狀態
我爲 '增加' 按鈕,按鈕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是相似的。
因爲這些按鈕都改變自己的狀態,我需要使用Handler
一個小的延遲後調整Button.setEnabled()
和Button.setPressed()
,使用戶的手指不會礙事(見https://stackoverflow.com/a/28788780/852795)。下面是使用上述setEnabled(final Button b, final boolean set)
方法:
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()
}
一切的偉大工程,一個小小的例外:當用戶按下「增加」按鈕足夠的時間到達按鈕將被禁用的最大值和「壓'狀態將被設置爲true,但是,如果再次按下該狀態,則「按下」狀態將被關閉。在功能上,該按鈕被禁用。我知道這是因爲onClickHandler沒有被調用。那爲什麼我的按鈕失去了'按下'狀態?我怎樣才能阻止這種情況發生?
更新:縱觀https://stackoverflow.com/a/8693444/852795我試圖堵到onTouchListener()
以「截取」那是關閉狀態,按下觸摸。但是,這也不會被調用,因爲我想象,該按鈕被禁用。
我不認爲你可以使用按下狀態時,該按鈕被禁用。 –
更可靠的方法來處理這可能是更改您的按鈕背景爲一個StateListDrawable與其「禁用」狀態設置爲其「按下」狀態相同。 https://developer.android.com/guide/topics/resources/drawable-resource.html#StateList – Egg
該按鈕被禁用,按下的狀態被設置爲'true',這一切正常。如果再次按下(禁用時),則按下的狀態將被關閉。 –