У меня была такая же проблема.
В моем приложении домашний экран имеет EditText
для поиска, а также красивый большой логотип. Когда пользователь нажимает EditText
, чтобы ввести поисковый запрос, появится мягкая клавиатура и сжатие макета, так что использование adjustResize
выглядело так же плохо, как с использованием adjustPan
.
После выполнения некоторых исследований о том, как сказать, когда клавиатура показывает и чтение this rant from Dianne Hackborn говорит нам, что мы действительно не должны уход когда клавиатура появляется, я решил пересмотреть это и смотреть на него как проблема компоновки , Это было только в том случае, если высота макета была ниже определенного порога, что у меня была проблема.
Я создал подкласс для основного макета с переопределением для onLayout()
, который вызовет событие обратного вызова, когда а) высота макета переместилась с нижнего порога на выше порогового значения и b) высота превысила пороговое значение до нижнего порога. В зависимости от того, как это происходит, я бы начал анимацию, чтобы либо удалить логотип, либо перерисовать его.
Я не буду публиковать этот код здесь, потому что, если бы я сделал это сейчас, я бы просто использовал ViewTreeObserver.OnGlobalLayoutListener
, чтобы узнать, когда макет изменился. Он был бы наиболее похож на this answer, за исключением того, что вместо проверки величины изменения высоты я установил бы определенный порог и запустил соответствующую анимацию, если высота пересечет порог.
Вы правы, я столкнулся с проблемой не так. Клавиатура не имеет значения, имеет значение размер макета. Это был глазник! –