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

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


person Chrispix    schedule 20.01.2009    source источник


Ответы (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 перед запуском действия ввода текста.

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

person Reto Meier    schedule 20.01.2009