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