Android
клавиатура
Поиск…
Скрыть клавиатуру, когда пользователь нажимает на другое место на экране
Добавьте код в свою деятельность .
Это будет работать и для Fragment , поэтому нет необходимости добавлять этот код в Fragment .
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
View view = getCurrentFocus();
if (view != null && (ev.getAction() == MotionEvent.ACTION_UP || ev.getAction() == MotionEvent.ACTION_MOVE) && view instanceof EditText && !view.getClass().getName().startsWith("android.webkit.")) {
int scrcoords[] = new int[2];
view.getLocationOnScreen(scrcoords);
float x = ev.getRawX() + view.getLeft() - scrcoords[0];
float y = ev.getRawY() + view.getTop() - scrcoords[1];
if (x < view.getLeft() || x > view.getRight() || y < view.getTop() || y > view.getBottom())
((InputMethodManager)this.getSystemService(Context.INPUT_METHOD_SERVICE)).hideSoftInputFromWindow((this.getWindow().getDecorView().getApplicationWindowToken()), 0);
}
return super.dispatchTouchEvent(ev);
}
Регистрация обратного вызова для открытия и закрытия клавиатуры
Идея состоит в том, чтобы измерить макет до и после каждого изменения, и если произошли существенные изменения, вы можете быть уверены, что его программная клавиатура.
// A variable to hold the last content layout hight
private int mLastContentHeight = 0;
private ViewTreeObserver.OnGlobalLayoutListener keyboardLayoutListener = new ViewTreeObserver.OnGlobalLayoutListener() {
@Override public void onGlobalLayout() {
int currentContentHeight = findViewById(Window.ID_ANDROID_CONTENT).getHeight();
if (mLastContentHeight > currentContentHeight + 100) {
Timber.d("onGlobalLayout: Keyboard is open");
mLastContentHeight = currentContentHeight;
} else if (currentContentHeight > mLastContentHeight + 100) {
Timber.d("onGlobalLayout: Keyboard is closed");
mLastContentHeight = currentContentHeight;
}
}
};
то в нашем onCreate
задайте начальное значение для mLastContentHeight
mLastContentHeight = findViewById(Window.ID_ANDROID_CONTENT).getHeight();
и добавить слушателя
rootView.getViewTreeObserver().addOnGlobalLayoutListener(keyboardLayoutListener);
не забудьте удалить слушателя при destroy
rootView.getViewTreeObserver().removeOnGlobalLayoutListener(keyboardLayoutListener);
Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow