Форма входа: клавиатура скрывается при нажатии кнопки, но не отображается снова после нажатия на текст редактирования - PullRequest
0 голосов
/ 25 марта 2020

У меня есть форма входа в систему с edittexts и кнопка входа (подключиться). Когда пользователь щелкает по тексту редактирования, открывается клавиатура, а когда он нажимает кнопку входа (подключение), клавиатура исчезает. Проблема заключается в том, что если пользователь нажимает текст редактирования после нажатия кнопки входа в систему, клавиатура отображается в течение секунды, а затем исчезает. Использование rootview для вычисления, показывает ли клавиатура или нет, так как это кажется самым простым способом в соответствии со стековым потоком. Как сделать так, чтобы после нажатия кнопки отображалась клавиатура?

Onclicklistener

boolean clicked=false;

        connect.setOnClickListener(v -> {


        clicked=true;
        keyboard();

    });

метод клавиатуры

    void keyboard(){

    InputMethodManager inputManager = (InputMethodManager)
            getSystemService(Context.INPUT_METHOD_SERVICE);

        final View activityRootView = findViewById(R.id.wrap);
        activityRootView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
            @Override
            public void onGlobalLayout() {
                Rect r = new Rect();
                activityRootView.getWindowVisibleDisplayFrame(r);

                if (clicked) {
                    int heightDiff = activityRootView.getRootView().getHeight() - (r.bottom - r.top);
                    if (heightDiff > 0.25 * activityRootView.getRootView().getHeight()) {
                        inputManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(),
                                InputMethodManager.HIDE_NOT_ALWAYS);
                    }
                }
            }
        });


}

1 Ответ

0 голосов
/ 25 марта 2020

Ваш слушатель onGlobalLayout вызывается при каждом обновлении макета, что приведет к отключению клавиатуры после каждого обновления макета, если кнопка была нажата один раз, когда я действительно не понимаю, что вы пытаетесь сделать и почему вы делаете эта проверка

if (heightDiff > 0.25 * activityRootView.getRootView().getHeight())

Вы можете просто отключить клавиатуру прямо в вашем ButtonClickListener

connect.setOnClickListener(v -> { 
inputManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);        });
...