Смена андроида: config меняет динамически - PullRequest
4 голосов
/ 30 августа 2011

Я создаю приложение для журнала, которое использует ViewPager и прокручивает различные WebView с.Большинство страниц - портретные, но некоторые из них можно рассматривать как альбомные.

Чтобы справиться с этим, я использую два метода в Activity, удерживающих ViewPager:

public void allowOrientationChanges() {
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);
}

public void enforcePortrait() {
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}

При этом мы гарантируем, что все страницы, которые просто должны быть портретными, остаются портретными (вызывая getActivity().enforcePortrait()), а те, которые имеют портретную / альбомную ориентацию, проходят весь процесс перезапуска (вызывая getActivity().allowOrientationChanges()).

Мы достигли точки, когда мы хотим добавить видео на некоторые страницы журнала.К сожалению, видео тег HTML5 не работает нормально, поэтому мы добавили VideoView в наш макет.Функция для добавления сейчас:

  • в портретной ориентации: отображение видео в определенном месте.( Готово! )
  • в альбомной ориентации: создание видео в полноэкранном режиме (например, приложение YouTube).

Я пытался сделать это, и толькоЯ нашел способ изменить размер VideoView в методе onConfigurationChanged() в Activity и уведомить fragment об изменении конфигурации.Проблема в том, что добавление android:configChanges="orientation|keyboardHidden" к Activity будет «запрещать» воссозданные виды.

Два возможных решения, о которых я подумал:

  1. Изменение android:configChanges из кода и в зависимости от страницы, но я не смог найти, существует ли этот вызов.
  2. Принудительное воссоздание метода onConfigurationChanged().Я не знаю, как заставить воссоздание fragment.

Есть идеи?

Ответы [ 3 ]

2 голосов
/ 30 августа 2011

Я создаю приложение для журнала, которое использует ViewPager и прокручивает различные WebViews.

Это надежно?

Большинство страниц - портретные, но некоторые из них можно рассматривать как пейзаж.

Пожалуйста, разрешите просматривать все страницы в альбомной ориентации. Если ваши пользователи хотят просматривать ваше приложение в альбомной ориентации - например, им не хочется поворачивать свой телевизор на бок только для того, чтобы использовать ваше приложение - пожалуйста, дайте им.

Есть идеи?

В onResume() действия попросите его уведомить фрагмент страницы журнала, чтобы исправить его размер / позицию VideoView, основанный на текущем Configuration (getResources().getConfiguration()).

2 голосов
/ 30 августа 2011

Может быть, есть способ обойти это, определив действие дважды в манифесте с похожими именами и установив для второго воплощения значение enabled = false. Затем динамически переключайтесь между двумя действиями, вызывая PackageManager.setComponentEnabledSetting (....) хотя это просто идея, но не уверен, что это сработает.

1 голос
/ 31 августа 2011

Я только что исправил это.Спасибо за ваши ответы.

Мое решение состояло в том, чтобы Activity имел флаг android:configChanges="orientation|keyboardHidden".

После этого я переопределяю метод onConfigurationChanged() внутри Fragment, где яизмените размер WebView или VideoView в зависимости от того, что мне нужно.

РЕДАКТИРОВАТЬ:

Я только что написал в блоге об этом.

...