Как заблокировать ориентацию фрагмента без фиксации ориентации активности?

У меня есть конкретный прецедент, когда я хочу, чтобы фрагмент был заблокирован в портретном режиме, но все же повернул действие (и/или другие фрагменты, видимые в одном и том же действии). Возможно ли это сделать?

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

Мое приложение поддерживает API 10+ (если есть хорошее решение, использующее API 11+, я могу рассмотреть возможность удаления поддержки для ландшафта в API < 11).

Спасибо заранее.

Ответ 1

Взгляните на этот ответ:

Переопределить setUserVisibleHint() в каждом фрагменте.

В портрете только фрагменты:

@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
    super.setUserVisibleHint(isVisibleToUser);
    if(isVisibleToUser) {
        Activity a = getActivity();
        if(a != null) a.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
    }
}

в портретном/альбомном фрагменте:

@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
    super.setUserVisibleHint(isVisibleToUser);
    if(isVisibleToUser) {
        Activity a = getActivity();
        if(a != null) a.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR);
    }
}

Это позволит всей активности вращаться в одном фрагменте, но фиксировать ее на портрете в других.

Ответил: fooobar.com/questions/248003/...

Ответ 2

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

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR);

и для всех остальных/по умолчанию Фрагмент

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);

Надеюсь, я помог