Как изменить IMEaction клавиатуры при повороте экрана - PullRequest
0 голосов
/ 07 марта 2019

Мне нужно менять IME клавиатуры всякий раз, когда экран поворачивается. Если устройство находится в альбомной ориентации, мне нужно, чтобы действие было IME_ACTION_NEXT, если устройство вращается - пока отображается клавиатура - мне нужно изменить действие, чтобы принимать возвраты.

Я пытался создать другую версию представления в виде ландшафта, но это не меняет клавиатуру. Я также попытался изменить действие ime в «onConfigurationChanged», но в этом случае в клавиатуру также не вносятся изменения.

Есть ли способ заставить клавиатуру обновляться при вращении?

1 Ответ

1 голос
/ 07 марта 2019

OnConfigurationChanged вызывается только в том случае, если вы указываете это через android: configChanges = "direction | screenSize" в своем манифесте. У вас есть этот набор? В противном случае ваша активность не вызывается из-за ориентации, она фактически уничтожается и перезапускается.

Альтернативой может быть использование отдельных макетов для пейзажа и портрета. Они могут указывать разные настройки, но тогда вам нужно сохранить 2 файла.

Можно установить значение в вашем одиночном макете равным @ string / keyboardAction и определить его в файле strings.xml, а затем создать альбомный файл strings.xml для его переопределения. Это должно сработать, но я никогда не пытался сделать это со строкой imeOptions, поэтому я не могу полностью пообещать это. Но это будет самый чистый из двух способов, если он сработает.

Edit:

Просто перечитайте - это когда клавиатура уже присутствует, работает ли она, если она была открыта после поворота? Это действительно имеет смысл - теперь мы углубляемся в API клавиатуры. То, что фактически заставляет клавиатуру перезагрузить это поле, будет различным в разных клавиатурах, поэтому точный ответ затруднен. Вещь, которая наверняка сделает это, будет вызвана, если onStartInputView вызывается с новым сеансом (второй параметр true) при ротации. Если он вызывается с false, он может или не может сбросить метку, но это следует. Я не верю, что это называется вообще на ротации.

В любом случае попробуйте вызвать inputMethodManager.restartInput при ротации. Это функция, которую EditText вызывает при изменении inputType, приложение клавиатуры должно затем повторно инициализировать представления.

...