Как показать окно редактирования текста «над» экраном? - PullRequest
15 голосов
/ 20 января 2009

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

1 Ответ

38 голосов
/ 20 января 2009

Самое простое решение вашей проблемы - отобразить ваше 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.

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

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