Клавиатура прячется при смене ориентации

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

В макете есть Activity с EditText. Когда пользователь нажимает на это поле, появляется программный ввод. С добавлением флага android:windowSoftInputMode="stateUnchanged" к AndroidManifest все работает как положено при изменении ориентации устройства - клавиатура сохраняет свое состояние. Но когда есть Fragment поверх этого Activity, а EditText находится в Fragment, это не работает. Я предполагаю, что флаг на AndroidManifest в этом случае пропускается (флаг охватывает только Activity), а при смене ориентации клавиатура исчезает.

Я не нашел чистого решения для сохранения состояния клавиатуры при изменении ориентации. Я видел решение с ручным отображением клавиатуры на onActivityCreated(), но мне это не нравится, так как требуется удерживать состояние видимости клавиатуры для некоторой переменной в объекте, которая переживает изменения ориентации. Я обнаружил, что если в Activity есть EditText, даже когда пользователь не прикасается к нему и он не сфокусирован, клавиатура сохраняет свое состояние, что совершенно неожиданно.

Я не могу удалить Fragment и полагаться только на Activity, потому что Fragments используются в ViewPager. Но я проверил, что это происходит и тогда, когда Fragment напрямую присоединен к Activity.

Я также обнаружил, что все приложения, которые я проверил, так или иначе решили эту проблему.

Есть ли чистое решение для сохранения состояния клавиатуры при изменении ориентации с помощью фрагментов?

Изменить: мне также не нравится вариант android:configChanges="orientation|screenSize".




Ответы (1)


Попробуйте добавить эту строку в свою активность в манифесте

андроид: configChanges = "ориентация"

Это не идеально, но вы можете попробовать

person Hamstersztyk    schedule 02.06.2017
comment
Я забыл упомянуть, что я отверг эту идею в начале: stackoverflow.com/a/7990543/1888738. Также android:configChanges работает только с флагами ориентация|экранный размер на пост-сотовых устройствах. - person Bresiu; 02.06.2017