ошибка изменения ориентации деятельности - PullRequest
0 голосов
/ 10 сентября 2018

У меня странная ошибка, которую я раньше не видел в приложениях для Android.При переходе от действия, заблокированного в портретном режиме, к занятию, заблокированному в ландшафтном режиме, и обратно, действие, которое должно быть в портретном режиме, появляется в портретном режиме, переходит в альбомную и затем обратно в портретную.

Это происходит, когдаустройство находится на столе без каких-либо реальных изменений ориентации.Я использую два отдельных действия, и это единственный код, который у меня есть в проекте.

Здесь - видео об ошибке, а - ссылка на конкретный проект, который воспроизводит эту ошибку.Это происходит на нескольких устройствах, поэтому он не изолирован от моего устройства.

Вопросы:

  • Знаете ли вы, что может быть причиной этого?
  • Есть ли что-нибудь, что вы можете порекомендовать для исправления этого?

Что я пробовал:

  • Настройка ориентациипрограммно
  • Гуглить и ничего не находить

Обновление 1

Больше вещей, которые я пробовал:

  • Установка портретной активности на "nosensor" и альбомной на "ландшафт"
  • Установка портретной активности на "nosensor" и программная установка альбомной активности в onCreate

Обновление 2

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

D/class com.mdk_studio.orientationbugtests.MainActivity: onStateNotSaved
D/class com.mdk_studio.orientationbugtests.MainActivity: onRestart
D/class com.mdk_studio.orientationbugtests.MainActivity: onWindowFocusChanged

Выход для ошибки шимми:

D/class com.mdk_studio.orientationbugtests.MainActivity: onStateNotSaved
D/class com.mdk_studio.orientationbugtests.MainActivity: onRestart
D/class com.mdk_studio.orientationbugtests.MainActivity: onWindowFocusChanged
D/class com.mdk_studio.orientationbugtests.MainActivity: onConfigurationChanged
D/class com.mdk_studio.orientationbugtests.MainActivity: onConfigurationChanged

Полагаю, теперь возникает вопрос: какЯ уверен, что изменение ориентации не вызывается?

1 Ответ

0 голосов
/ 12 сентября 2018

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

Комбинация, которая работала для меня и полностью убрала поведение, состояла в том, чтобы установить активность в манифесте, который я хочу в портрете, на "nosensor". Затем установите действие, которое я хочу в альбомной, в альбомную, используя

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

и установите ориентацию обратно в портретную позицию в onBackPressed до навигации. Эта часть важна, как только навигация была запущена, а затем вы устанавливаете ориентацию, в некоторых случаях, когда newConfiguration проходит через вызов onConfigurationChanged, он имеет неправильную ориентацию, а затем он каким-то образом вызывает другой вызов, чтобы исправить его после того, как был обновлен при первом вызове.

ТЛ; др Установите ориентацию для деятельности, которую вы хотите в портрете, на "nosensor". Программно установите ориентацию ландшафта в onCreate. Установите ориентацию обратно в портрет в onBackPressed, перед супер вызовом .

...