Как сделать так, чтобы android ориентация активности придерживалась начального значения? - PullRequest
0 голосов
/ 12 апреля 2020

Прежде чем мы начнем, это не дубликат этого старого вопроса: Android: Как придерживаться той же ориентации, с которой началось действие с , мой вариант использования немного более конкретен c и новые опции стали доступны, так как другой вопрос был задан и получен ответ

У меня есть экран «Просмотр изображения» в моем приложении. Экран работает в любой ориентации, но не должен меняться во время просмотра изображения:

  • Если у меня телефон portrait и открыть экран просмотра, изображение должно отображаться portrait
  • Если я затем поверну телефон на landscape, изображение все равно будет отображаться portrait
  • Если я выйду и снова войду в экран с телефоном в landscape, изображение должно отобразиться landscape
  • Если я выйду, поверну телефон на portrait и снова войду в экран, изображение должно отобразиться portrait еще раз

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

Я пробовал новые значения nosensor и locked, но оба этих жестких кода имеют значение 0 градусов, и я не вижу разницы в реализации. Я не верю, что могу программно проверить ориентацию в жизненном цикле действия / фрагмента, потому что это происходит после того, как все было снесено и воссоздано. Мне нужно решение для манифеста - существует ли такая настройка? Или способ сделать это программно, избегая повторного создания / перерисовки моего представления без сохранения экземпляра?

1 Ответ

0 голосов
/ 12 апреля 2020

Я думаю, что вы можете достичь этого с Manifest примерно так

<activity android:name=".FirstActivity" android:screenOrientation="user">
    <intent-filter>
        <action android:name="android.intent.action.Main" />

        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

<activity android:name=".SecondActivity" android:screenOrientation="locked">
    <intent-filter>
        <action android:name="android.intent.action.View" />

        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

Источник: элемент активности , секция android:screenOrientation

«заблокирован» Блокирует ориентацию на текущее вращение, что бы это ни было. Добавлено в уровень API 18.

...