Скрыть SoftKeyBoard на Android Oreo - PullRequest
0 голосов
/ 11 октября 2018

Я пытаюсь предотвратить появление клавиатуры после вызова requestFocus () в SearchView, но не существует решения, чтобы это исправить на Android 8.

Я пытался:

/* 1 /

 android:windowSoftInputMode="stateAlwaysHidden"

/ * 2 /

this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);

/ * 3 /

InputMethodManager inputMethodManager = (InputMethodManager) activity.getSystemService(Activity.INPUT_METHOD_SERVICE);
        if (activity.getCurrentFocus() != null && activity.getCurrentFocus().getWindowToken() != null)
            inputMethodManager.hideSoftInputFromWindow(activity.getCurrentFocus().getWindowToken(), 0);

/ * 4 /

 final View activityRootView = findViewById(R.id.rootLayout);
                activityRootView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {

                    @Override
                    public void onGlobalLayout() {
                        int heightDiff = activityRootView.getRootView().getHeight() - activityRootView.getHeight();
                        if (heightDiff > dpToPx(Act_StoreOrder.this, 200)) { // if more than 200 dp, it's probably a keyboard...
                            Log.i("<<<Clavier","Clavier Showed Up");
                            //hide here 
                        }
                    }
                });

onGlobalLayout () работал, но программная клавиша показывается в течение почти 0,5 с и исчезает.

Любая помощь, чтобы скрыть эту программную клавиатуру даже после вызова метода requestFocus () ??

1 Ответ

0 голосов
/ 11 октября 2018

наконец я решил проблему, я просто использовал эту функцию ниже, чтобы перехватить FocusChanges и скрыть softKeyboard после 100 (достаточно времени, чтобы перехватить softkeyboard)

      @Override
public void onWindowFocusChanged(boolean hasFocus) {
    super.onWindowFocusChanged(hasFocus);

    if (hasFocus) {
        View lFocused = getCurrentFocus();
        if (lFocused != null)
            lFocused.postDelayed(new Runnable() {
                @Override
                public void run() {
                    InputMethodManager lInputManager = (InputMethodManager) pContext.getSystemService(Context.INPUT_METHOD_SERVICE);
                    lInputManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
                }
            }, 100);//Modified to 100ms to intercept SoftKeyBoard on Android 8 (Oreo) and hide it.
    }
}
...