2011-01-06 2 views
1

Я построил поисковый виджет на основе кода, Searchable Dictionary v2. Все работает нормально, но есть одна проблема.Как сохранить диалог поиска в Android на вращающемся экране?

Если я поворачиваю экран с портрета на пейзаж или наоборот, когда диалоговое окно поиска включено, окно редактирования текста и экран клавиатуры исчезают и снова запускаются.

Есть ли способ сделать это, чтобы он переключил окно редактирования в соответствующий режим (пейзаж или портрет) без выхода и повторного запуска диалогового окна?

Вы можете проверить поведение с помощью поискового словаря. Я хочу что-то вроде виджета google. Он просто переключает режим редактирования, когда он держит экран.

ответ

5

После изменения ориентации экрана Android создает новый вид активности/просмотра, поэтому вам, возможно, придется самостоятельно управлять ориентацией экрана. Я успешно использовал это решение в приложении, я предполагаю, что оно также относится к виджетам.

Смотрите эту страницу о том, как сделать это:
http://www.androidpeople.com/android-how-to-handle-screen-orientation-change-issue/

Некоторые другие полезные советы (в основном одни и те же решения) здесь:
How do I handle screen orientation changes with an activity started within a tab's activity
How to handle screen orientation change when progress dialog and background thread active?

Некоторые сведения о OnPause() и onSaveInstanceState() (который может не применяться, поскольку вы используете виджет, но на всякий случай :)) находится здесь:
How do I disable orientation change on Android?

+0

URL больше не работает. Можете ли вы описать решение? Я пытаюсь воссоздать процесс поиска, чтобы расширить действие поиска на панели инструментов и ввести текст поиска пользователей. Это работает, пока я не закончу поиск. В этот момент иконы на панели инструментов исчезают. Значок навигации и значок переполнения (три точки) остаются, но значок поиска (и значок загрузки) там пропал. Они восстанавливаются на другом повороте экрана –

2

Что я сделал, чтобы зафиксировать ориентацию, когда отображается диалоговое окно, а затем разблокировать его, когда закончил:

int currentOrientation = getResources().getConfiguration().orientation; 
     if (currentOrientation == Configuration.ORIENTATION_LANDSCAPE) { 
      setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE); //locks landscape 
     } 
     else { 
      setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT); //locks port 
     } 
    // do work 
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR); 
Смежные вопросы