Подтвердить что ты не робот

Удалить программные ограничения ориентации

В моем манифестах я настроил действие, ограниченное портретной ориентацией. Но мне нужно удалить это ограничение при условии. Итак, как я могу программно удалить ограничения ориентации?

upd: мои текущие настройки:

    <activity
        android:name=".activity.MainActivity"
        android:label="@string/app_name"
        android:theme="@android:style/Theme.NoTitleBar"
        android:screenOrientation="portrait"
        android:configChanges="orientation">


 /**
 * Defines whether the device being used is a tablet and if so adds horizontal orientation option.
 */
     protected void _updateScreenOrientationModes(){
         if(((MyApplication) getApplication())._isTablet == true)
                setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
         }
4b9b3361

Ответ 1

Если вы установили android:screenOrientation в свой манифест, вы можете программно установить ориентацию с помощью Activity.setRequestedOrientation().

По сути, "удаление ограничения" выполняется

    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);

после чего активность будет демонстрировать поведение по умолчанию изменения ориентации экрана при изменении ориентации физического устройства.

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

Что бы я сделал, обязательно установите android:configChanges="orientation" в свой манифест и переопределите Activity.onConfigurationChanged(), в котором вы можете, в соответствии с вашим состоянием, либо выполнить изменение ориентации, либо кешировать ориентацию. Затем, когда ваше состояние изменяется, вы будете иметь текущую физическую ориентацию, чтобы вы могли изменить ее в этой точке, если это необходимо.

Ответ 2

Я собираюсь оставить свой другой ответ, поскольку он затрагивает более общий вопрос, который вы задали. Однако в комментарии к кому-то еще вы сказали:

Мне нужно, чтобы планшеты имели только ориентацию и телефоны только портрет

Ваш конкретный случай на самом деле проще, чем в общем случае: удалите из вашего манифеста как android:screenOrientation="portrait", так и android:configChanges="orientation", чтобы разрешить поведение по умолчанию. Затем, во время запуска, если устройство представляет собой телефонную трубку, настройте портретную ориентацию с помощью

    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

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

Ответ 3

Программно вы можете изменить ориентацию экрана, используя "setRequestedOrientation()"

В вашем классе java напишите следующий код в соответствии с вашим условием.....

Чтобы перейти в портретный режим, используйте константу ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE:

     setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

Чтобы перейти в портретный режим, используйте константу ActivityInfo.SCREEN_ORIENTATION_PORTRAIT:

   setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);