Отрегулируйте макет, когда отображается мягкая клавиатура Android или скрыта

Моя цель – добиться того, что большинство приложений для обмена сообщениями, таких как Facebook messenger, Viber, Что делать при отображении листа вложений. Если мягкая клавиатура видна и пользователь хочет что-то прикрепить, клавиатура скрыта, а лист вложений представлен на ее месте.

Для выполнения этой работы изменения макета должны произойти при изменении размера корневого представления. В противном случае появляется графический сбой, когда мои изменения макета применяются незадолго до показа / скрытия клавиатуры.

Если бы я мог изменить свой макет, точно, когда клавиатура скрыта, я мог бы исправить это. Я попытался использовать onGlobalLayoutListener но без желаемого результата.

Введите описание изображения здесь

Добавьте эту строку в манифест вашей активности.

  <activity android:name="com.your.Activity" android:windowSoftInputMode="stateHidden|adjustPan" /> 

Используйте этот код. Он будет полезен.

 android:windowSoftInputMode="adjustNothing" 

Лучшее место, чтобы узнать, изменилось ли ваше макет из-за клавиатуры (dis), появившейся и действующей на изменение, находится внутри onMeasure() корневого макета.

Более подробно я создал пользовательский LinearLayout, который используется в качестве корневого макета. Я переопределил onMeasure и подсчитал, что такое текущая высота клавиатуры. В зависимости от высоты клавиатуры и того, должна ли моя сетка вложений быть видимой или нет, я изменяю видимость сетки вложений. Я даже могу установить высоту сетки так же, как клавиатуру.

Результаты выглядят так, что сетка всегда находится под клавиатурой, а текст остается в том же вертикальном месте.