Как показать окно редактирования текста над экраном?

У меня есть приложение, которое имеет основной макет портрета (фиксируется как портрет), и есть одно место для ввода текста. Я хотел бы запускать, как всплывающее окно в альбомной ориентации, с затуманенным фоном. Я знаю, что есть виджет Popup, но любые идеи для поворота окна редактирования текста были бы замечательными. Вращение его в портретный вид (только текстовое поле), когда клавиатура выскользнула, также будет работать, как показано на новом экране с текстовым полем на слайде на клавиатуре.

Ответ 1

Самое простое решение вашей проблемы - отобразить EditText в отдельной теге dialog, которую вы запускаете из основной (фиксированной по портрету) активности.

Действие EditText не должно иметь фиксированной ориентации, поэтому оно будет вращаться, как вы ожидаете, когда вы выдвигаете клавиатуру.

Создание операции ввода текста

Создайте новое действие. В нем содержится только вид EditText и все, что вы хотите включить (возможно, кнопки OK/Отмена и, возможно, ярлык?). В манифесте задается тема 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 к записи портрета Activity Activity. Он должен быть зарегистрирован для прослушивания keyboardHidden.

android:configChanges="keyboardHidden"

Внутри этой операции переопределите onConfigurationChanged, чтобы запустить операцию ввода текста.

@Override
public void onConfigurationChanged(Configuration newConfig) {  
  Intent i = new Intent(this,TextEntryActivity.class);    
  startActivityForResult(i, STATIC_INTEGER_VALUE);
}

Вы можете проверить, чтобы клавиатура была открыта (а не скрыта), используя переменную newConfig, прежде чем запускать операцию ввода текста.

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