У меня есть действие, использующее "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» не вызывается, когда отображается автозаменяемая часть программной клавиатуры, а позиционированный вид остается под ней, что делает ее наполовину видимой.Мне нужно снова отрегулировать его положение, что мне делать?Каков правильный подход к этому?Любое предложение ценно, спасибо.