Sök…


Dölj tangentbordet när användaren knackar någon annanstans på skärmen

Lägg till kod i din aktivitet .

Detta skulle fungera för Fragment , utan att behöva lägga till den här koden i 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);
}

Registrera ett återuppringning för tangentbord som är öppet och stängt

Tanken är att mäta en layout före och efter varje ändring och om det sker en betydande förändring kan du vara något säker på att det är programtangentbordet.

// 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 sedan in vårt onCreate initialvärde för mLastContentHeight

mLastContentHeight = findViewById(Window.ID_ANDROID_CONTENT).getHeight();

och lägg till lyssnaren

rootView.getViewTreeObserver().addOnGlobalLayoutListener(keyboardLayoutListener);

glöm inte att ta bort lyssnaren på destroy

rootView.getViewTreeObserver().removeOnGlobalLayoutListener(keyboardLayoutListener);


Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow