Как заблокировать экран, чтобы не разрешать поворот в одном фрагменте

#android #android-sensors #screen-orientation

#Android #android-датчики #ориентация экрана

Вопрос:

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

 override fun onPageSelected(position: Int) {
    val item = getDataItem(position)   
    if (item is SpecialItem) {

        if (context?.resources?.configuration?.orientation == Configuration.ORIENTATION_PORTRAIT) {
            activity?.requestedOrientation = ActivityInfo.ORIENTATION_PORTRAIT

            // or tried activity?.requestedOrientation = ActivityInfo.ORIENTATION_PORTRAIT

           // or tried activity?.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_LOCKED

        }


    } else {
        activity?.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR
    } 
......
}
 

Но после вызова

 activity?.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE
 

он все еще может вращать экран.

Как правильно заблокировать экран здесь?

В чем разница между

 activity?.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR
 

и

 activity?.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_NOSENSOR
 

и

 activity?.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_FULL_USER
 

Обновить

Спасибо за JensV, обратите внимание, что это была опечатка, и она должна быть ORIENTATION_PORTRAIT там, и она работает.

Теперь вопрос только в том, в чем разница, и следует ли ее использовать

 activity?.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_LOCKED
 

или

 activity?.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT

// or activity?.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
 

Комментарии:

1. Вы проверили, что код действительно вызывается? На первый взгляд мне кажется правильным

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

3. Я предполагаю, что это опечатка, которую вы сказали, что хотите заблокировать в портретном режиме, а затем использовать SCREEN_ORIENTATION_LANDSCAPE вместо SCREEN_ORIENTATION_PORTRAIT ?

4. ха, @JensV, ты прав!!! на самом деле там опечатка, и мой журнал показывает, что там было, это SCREEN_ORIENTATION_PORTRAIT . мой плохой. кстати, знаете ли вы разницу между тремя внизу? Мне нужно выбрать один для возврата, чтобы разрешить пользователю поворот.

Ответ №1:

Публикация в качестве ответа, поскольку я решил вашу проблему.

Основная проблема заключалась в том, что SCREEN_ORIENTATION_LANDSCAPE вместо SCREEN_ORIENTATION_PORTRAIT

Ответ на ваш второй вопрос: я бы пошел с SCREEN_ORIENTATION_UNSPECIFIED тем, который сбросит обратно, не установив ничего конкретного.