Android非Edittextクリックキーボードを閉じる
1572 ワード
原理:イベント配信時に現在フォーカスを取得しているViewがEditTextであるかどうかを判断し、EditTextであるかどうかを判断してMotionEventがこのView上で発生しているかどうかを判断し、キーボードを非表示にし、足りないのは別のEditTextをクリックしてキーボードが非表示になってから表示になることです.
使用:この機能は、次のコードをMainActicityにコピーすることで実現できます.
使用:この機能は、次のコードをMainActicityにコピーすることで実現できます.
/**
*
*
*/
@CallSuper
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
if (ev.getAction() == MotionEvent.ACTION_DOWN ) {
View view = getCurrentFocus();
if (isShouldHideKeyBord(view, ev)) {
hideSoftInput(view.getWindowToken());
}
}
return super.dispatchTouchEvent(ev);
}
/**
*
*/
protected boolean isShouldHideKeyBord(View v, MotionEvent ev) {
if (v != null && (v instanceof EditText)) {
int[] l = {0, 0};
v.getLocationInWindow(l);
int left = l[0], top = l[1], bottom = top + v.getHeight(), right = left + v.getWidth();
return !(ev.getX() > left && ev.getX() < right && ev.getY() > top && ev.getY() < bottom);
//return !(ev.getY() > top && ev.getY() < bottom);
}
return false;
}
/**
*
*/
private void hideSoftInput(IBinder token) {
if (token != null) {
InputMethodManager manager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
manager.hideSoftInputFromWindow(token, InputMethodManager.HIDE_NOT_ALWAYS);
}
}