在处理EditText是否可以输入的时候,我们通常会想到使用Focus来控制,但是仅使用android.view.View#setFocusable(int)却不一定能满足我们需求。当我们想要重新可以输入,设置setFocusable(true)不起作用。
正确的使用方法是:
public void enable(View view) {
editText.setFocusableInTouchMode(true);
}
public void disable(View view) {
editText.setFocusable(false);
}
public void setFocusableInTouchMode(boolean focusableInTouchMode) {
// Focusable in touch mode should always be set before the focusable flag
// otherwise, setting the focusable flag will trigger a focusableViewAvailable()
// which, in touch mode, will not successfully request focus on this view
// because the focusable in touch mode flag is not set
//这段话是重点,意思就是说这个方法应该在设置focusable flag之前调用。
setFlags(focusableInTouchMode ? FOCUSABLE_IN_TOUCH_MODE : 0, FOCUSABLE_IN_TOUCH_MODE);
// Clear FOCUSABLE_AUTO if set.
if (focusableInTouchMode) {
// Clears FOCUSABLE_AUTO if set.
setFlags(FOCUSABLE, FOCUSABLE_MASK);
}
}
网友评论