Как отобразить поле редактирования текста “поверх” экрана?
-
19-08-2019 - |
Вопрос
У меня есть приложение, которое имеет основной макет portrait (оно исправлено как portrait), и есть одно место для ввода текста.Я хотел бы запустить что-то вроде всплывающего окна в альбомной ориентации с затуманенным фоновым изображением.Я знаю, что есть всплывающий виджет, но любые идеи по повороту окна редактирования текста были бы замечательными.Поворот его в портретный вид (только текстовое поле) при выдвижении клавиатуры также сработает, как и отображение нового экрана с текстовым полем на слайде клавиатуры.
Решение
Самое простое решение вашей проблемы - это отобразить ваш EditText
в рамках отдельного dialog
тематическое действие, которое вы запускаете из своего основного (с фиксированным портретом) действия.
Действие EditText не должно иметь фиксированной ориентации, поэтому оно будет вращаться так, как вы ожидаете, когда вы выдвигаете клавиатуру.
Создание действия по вводу текста
Создайте новое действие, содержащее только вид EditText и все остальное, что вы хотите включить (возможно, кнопки OK / Cancel и, возможно, метку?).В рамках манифеста установите его тему на 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
чтобы запустить действие по вводу текста.В рамках этого действия вызовите setResult
чтобы вернуть текстовую строку, введенную в рамках возвращаемого намерения, используя методы, описанные в этот пост.
Переопределить onActivityResult
метод для прослушивания результата от подзадачи.
Запуск запуска на открытой клавиатуре
Вы можете запустить действие по вводу текста в любое удобное для вас время, но если вы хотите всегда отображать его при открытой клавиатуре, вы можете явно зафиксировать это событие.
Начните с добавления 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, прежде чем запускать операцию ввода текста.
Вы также можете захотеть использовать тот же метод для автоматического возврата к операции ввода текста, когда клавиатура скрыта.