Android
Tastatur
Suche…
Blenden Sie die Tastatur aus, wenn der Benutzer an eine andere Stelle auf dem Bildschirm tippt
Fügen Sie Code in Ihre Aktivität ein .
Dies würde auch für Fragment funktionieren, und Sie müssen diesen Code nicht in Fragment hinzufügen.
@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);
}
Registrieren Sie einen Rückruf für das Öffnen und Schließen der Tastatur
Die Idee ist, ein Layout vor und nach jeder Änderung zu messen, und wenn sich eine wesentliche Änderung ergibt, können Sie sicher sein, dass es das Softkeyboard ist.
// 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;
}
}
};
Dann onCreate
in unserem onCreate
den Anfangswert für mLastContentHeight
mLastContentHeight = findViewById(Window.ID_ANDROID_CONTENT).getHeight();
und fügen Sie den Listener hinzu
rootView.getViewTreeObserver().addOnGlobalLayoutListener(keyboardLayoutListener);
Vergessen Sie nicht, den Hörer bei destroy
zu entfernen
rootView.getViewTreeObserver().removeOnGlobalLayoutListener(keyboardLayoutListener);
Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow