Получить мягкую высоту клавиатуры с автозаменой части клавиатуры - PullRequest
0 голосов
/ 27 сентября 2018

У меня есть действие, использующее "AdjustPan" в качестве конфигурации для изменения размера, и мне нужно рассчитать высоту клавиатуры без использования "AdjustResize", потому что мне нужно сохранить некоторые представления в полноэкранном режиме (что означает, что они должны оставаться там, где они есть,клавиатура должна скрывать их) и расположить вид прямо над клавиатурой.В нашем приложении есть кнопка сообщения, и я открываю клавиатуру нажатием кнопки.Когда это происходит, я использую OnGlobalLayoutListener и использую метод «getWindowVisibleDisplayFrame», чтобы получить высоту клавиатуры.Вот некоторый код для этого:

private void message()
    {
        InputMethodManager methodManager =
                (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
        if (methodManager != null && !isKeyboardOpen)
        {
            methodManager.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);
            if (bottomCoordinate == 0)
            {
                RelativeLayout layout = findViewById(getFullScreenContainerId());
                layout.getViewTreeObserver().addOnGlobalLayoutListener(
                        new ViewTreeObserver.OnGlobalLayoutListener()
                        {
                            @Override
                            public void onGlobalLayout()
                            {
                                layout.getViewTreeObserver().removeOnGlobalLayoutListener(this);
                                Rect r = new Rect();
                                layout.getWindowVisibleDisplayFrame(r);

                                bottomCoordinate = r.bottom - r.top;

                                translateMessageView(bottomCoordinate);
                            }
                        });
            }
            else
                translateMessageView(bottomCoordinate);
            isKeyboardOpen = true;
        }
    }

"translateMessageView" в основном устанавливает координату Y представления в "bottomCoordinate - view.getHeight ()".Это работает хорошо до тех пор, пока автозамена части программных клавиатур не станет видимой.По-видимому, метод «getWindowVisibleDisplayFrame», по-видимому, не добавляет автозамену части представления, или метод «onGlobalLayout» не вызывается, когда отображается автозаменяемая часть программной клавиатуры, а позиционированный вид остается под ней, что делает ее наполовину видимой.Мне нужно снова отрегулировать его положение, что мне делать?Каков правильный подход к этому?Любое предложение ценно, спасибо.

1 Ответ

0 голосов
/ 27 сентября 2018

(Не оригинальный ответ)

Rect r = new Rect ();

View rootview = this.getWindow (). GetDecorView ();// this = активность

rootview.getWindowVisibleDisplayFrame (r);

Результатом является количество места, которое ваше приложение использует на экране (работает, даже если активность не изменяется).Очевидно, что оставшееся место на экране будет использоваться клавиатурой (если она видна)

Найденный здесь идентификатор: https://github.com/freshplanet/ANE-KeyboardSize/blob/master/android/src/com/freshplanet/ane/KeyboardSize/getKeyboardY.java

Вы можете посетить Оригинальный ответ

Получение размеров программной клавиатуры

...