Самое простое решение вашей проблемы - отобразить ваше EditText
в отдельном dialog
тематическом действии, которое вы запускаете из своего основного (с фиксированным портретом) действия.
Деятельность EditText не должна иметь фиксированную ориентацию, поэтому она будет вращаться так, как вы ожидаете, когда вы выдвигаете клавиатуру.
Создание операции ввода текста
Создайте новую активность, содержащую только представление EditText и все, что вы хотите включить (возможно, кнопки «ОК» / «Отмена» и, возможно, метку?). В манифесте установите его тему на Theme.Dialog
.
<activity android:name="TextEntryActivity"
android:label="My Activity"
android:theme="@android:style/Theme.Dialog"/>
Смазывание или размытие действий за диалоговым окном выполняется путем изменения свойств окна основного действия (вашего диалогового окна ввода текста). В его методе onCreate используйте getWindow().setFlags
, чтобы применить размытие к любым фоновым действиям.
getWindow().setFlags(WindowManager.LayoutParams.FLAG_BLUR_BEHIND,
WindowManager.LayoutParams.FLAG_BLUR_BEHIND);
Запуск и чтение введенных значений из операции ввода текста
Используйте startActivityForResult
для запуска текстовой записи Activity. В рамках этого действия вызовите setResult
, чтобы вернуть текстовую строку, введенную в возвращаемом намерении, используя методы, описанные в в этом сообщении .
Переопределите метод onActivityResult
, чтобы прослушать результат из подкласса Activity.
Запуск запуска на открытой клавиатуре
Вы можете запускать текстовую запись Activity в любое время, но если вы хотите всегда отображать ее при открытой клавиатуре, вы можете явно зафиксировать это событие.
Начните с добавления атрибута android:configChanges
в запись манифеста Портретной деятельности. Для прослушивания keyboardHidden
.
необходимо зарегистрироваться.
android:configChanges="keyboardHidden"
Внутри этого действия переопределите onConfigurationChanged
, чтобы запустить текстовое действие.
@Override
public void onConfigurationChanged(Configuration newConfig) {
Intent i = new Intent(this,TextEntryActivity.class);
startActivityForResult(i, STATIC_INTEGER_VALUE);
}
Возможно, вы захотите проверить, что клавиатура открыта (а не скрыта) с помощью переменной newConfig перед запуском текстовой записи Activity.
Вы также можете использовать ту же технику для автоматического возврата из действия ввода текста, когда клавиатура скрыта.