Как отобразить поле редактирования текста “поверх” экрана?

StackOverflow https://stackoverflow.com/questions/460418

Вопрос

У меня есть приложение, которое имеет основной макет 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, прежде чем запускать операцию ввода текста.

Вы также можете захотеть использовать тот же метод для автоматического возврата к операции ввода текста, когда клавиатура скрыта.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top