У меня есть приложение с основным макетом портрета (оно зафиксировано как портрет), и есть одно место для ввода текста. Я хотел бы запустить как всплывающее окно в альбомной ориентации с затуманенным фоновым изображением. Я знаю, что есть всплывающий виджет, но любые идеи по вращению поля редактирования текста были бы замечательными. Поворот его в портретный вид (только текстовое поле), когда клавиатура выдвинута, также будет работать, как и отображение нового экрана с текстовым полем на слайде клавиатуры.
Как показать поле редактирования текста на экране?
Ответы (1)
Самое простое решение вашей проблемы — отобразить ваш 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 перед запуском действия ввода текста.
Вы также можете использовать ту же технику для автоматического возврата из действия ввода текста, когда клавиатура скрыта.