Как заблокировать ориентацию фрагмента без фиксации ориентации активности?
У меня есть конкретный прецедент, когда я хочу, чтобы фрагмент был заблокирован в портретном режиме, но все же повернул действие (и/или другие фрагменты, видимые в одном и том же действии). Возможно ли это сделать?
Все решения для блокировки ориентации фрагмента предлагают использовать 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);
Надеюсь, я помог