У меня есть вид сверху экрана, который я хочу, чтобы он всегда отображался (на каждом устройстве, даже если клавиатура открыта).Проблема в том, что в середине экрана у меня есть EditText.В некоторых устройствах, если EditText получает фокус, клавиатура открывается и заставляет раскладку двигаться вверх.Я не хочу использовать AdjustResize, который заставит фоновое изображение растягиваться.Можно ли узнать, была ли перемещена раскладка из-за открытой клавиатуры?Кроме того, как рассчитывается это движение вверх?Я думаю о перестановке вида всякий раз, когда это необходимо
- Первая попытка решить проблему: я пробовал расположение координаторов.Я не нашел поведения, чтобы делать то, что я хочу, поэтому я попытался реализовать свое собственное поведение.Я добавил пространство внизу макета и всякий раз, когда этот вид менял свою позицию, я пытался перевести вниз вид сверху.Но даже если layoutDependsOn () возвращает true, onDependentViewChanged () не вызывается для вычисления перевода.
- Вторая попытка решить проблему: я снова добавил пробел в нижней части макета.Кроме того, я добавил onGlobalLayoutListener, чтобы отслеживать, была ли клавиатура открыта.Если это так, я попытался вычислить положение космического вида и сравнить его с предыдущим положением, чтобы переместить вниз вид сверху.
- Третья попытка состояла в том, чтобы использовать AdjustNothing и самостоятельно передать переводы нужных видов.переместить себя на открытой клавиатуре.Это была единственная попытка, которая дала мне некоторые результаты, но кажется ошибочной, и в будущем я уверен, что это вызовет гораздо больше проблем, чем решит.
Кроме того, я обнаружил, что x, y, translationX, translationYне меняйте в AdjustPan.Единственный способ вычислить правильную позицию - использовать getLocationOnScreen ().Но это возможно после того, как вид был выложен.Можем ли мы рассчитать это до того, как представление будет выложено?