如何锁定片段方向而不锁定活动方向?

Kat*_*thy 12 android android-layout android-fragments android-orientation android-activity

我有一个特定的用例,我希望片段以纵向模式锁定,但仍然可以旋转活动(和/或在同一活动中可见的其他片段).有可能吗?

锁定片段方向的所有解决方案建议使用setRequestedOrientation并锁定活动方向,但我需要其他可见片段进行旋转.

我的应用程序支持API 10+(如果有一个使用API​​ 11+的不错的解决方案,我可能会考虑在API <11中删除对landscape的支持).

提前致谢.

Kev*_*rlo 11

看看这个答案:

覆盖每个片段中的setUserVisibleHint().

在肖像中只有片段:

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

在肖像/风景片段中:

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

这将允许整个活动在一个片段中旋转,但在其他片段中将其固定为纵向.

回答者:https: //stackoverflow.com/a/13252788/2767703

  • 那么这是不可能的,你不能只是在没有片段的情况下旋转活动.您可以锁定某些片段的方向. (3认同)

Bik*_*ash 7

回复可能有点晚了,但我可以看到您还没有找到解决方案,您可以尝试这样做,每当您从您的活动中调用您的片段时,请在它之前添加以下代码

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR);
Run Code Online (Sandbox Code Playgroud)

以及所有其他/默认片段

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);
Run Code Online (Sandbox Code Playgroud)

希望我有所帮助