Android Soft Keyboard: как манипулировать представлениями на клавиатуре вкл/выкл

У меня есть макет, который имеет один большой вид EditText в верхней части + пучок кнопок внизу. EditText позволяет сжиматься и расширяться, когда ime активируется/деактивируется с помощью adjust_resize. Кнопки внизу выдвинуты вверх над ime.

Я хотел бы скрыть эти кнопки, когда отобразит ime, чтобы предоставить достаточно места для просмотра EditText.

Я до сих пор пробовал следующее:

  • subclassed EditText и предоставил активности возможность зарегистрировать обратный вызов в представлении OnSizeChanged.

  • Используется этот обратный вызов, чтобы изменить видимость кнопок (на самом деле контейнера макета) до GONE.

Эта работа в порядке и скрывает кнопки при всплывании ime. Однако EditText не распространяется на новое доступное пространство. Кроме того, когда ime отключен, поле EditText теперь больше, чем оно было первоначально, нажимая кнопки (теперь показывающие) за пределы экрана.

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

Любые идеи о том, как заставить это работать? Или еще лучше, есть ли более простое решение для моего требования?

Спасибо...

NB: На мой взгляд, прокрутка не является хорошим вариантом.

Ответ 1

Я получил это, чтобы немного изменить указанный выше метод:

  • Обернул весь макет с помощью FrameLayout

  • подклассифицировал FrameLayout и предоставил активности возможность зарегистрировать обратный вызов на макете OnMeasure

Это дает активности возможность изменить видимость представлений до того, как они будут измерены.

Я все равно был бы очень рад услышать про более простые решения, особенно в отношении выяснения, видна ли клавиатура в настоящее время или нет. (окно dumpsys показывает эту информацию. Мы можем легко добраться до него?)

Ответ 2

Вы пытались вызвать myView.invalidade()?

Я использовал свойство GONE, но затем был изменен на button.setVisibility(View.INVISIBLE);, потому что у меня нет других вещей на моем экране.

на параметре adjust_resize, вам нужно будет снова проверить, когда клавиатура ушла и снова отобразить кнопки.