允许一个片段中的旋转/横向

Gar*_*con 26 android android-layout android-fragments android-orientation android-viewpager

我的应用程序有一个Activity,其中包含一个带有四个片段的FragmentPagerAdapter(使用ViewPagerIndicator库).其中一个片段设计了单独的纵向和横向布局,其他三个不需要并且需要固定为纵向.

我的想法是设置android:configChanges="orientation"在清单中,并呼吁getActivity().setRequestedScreenOrientation()onResume()所有的碎片,锁定到SCREEN_ORIENTATION_PORTRAIT在他们三个,而是SCREEN_ORIENTATION_UNSPECIFIED在需要允许旋转的一个,但这不起作用.该应用程序仍处于纵向模式.

有没有办法实现这个目标?

实际活动实际上不需要旋转,如果无论如何都允许片段在没有活动的情况下改变方向,但我没有发现任何提及这是可能的.如果活动旋转也同样可以,因为标签栏在横向时将被隐藏.

Gar*_*con 35

覆盖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)

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

  • 我不会覆盖 `setMenuVisibility` 覆盖 `setUserVisible` 它们都是同时设置的,所以两者的行为应该相同,只是使用 `UserVisible` 读取效果更好 (2认同)

Geo*_*ker 10

对我有用的一件事就是放

getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR);
Run Code Online (Sandbox Code Playgroud)

OnCreateView()每个片段的方法的顶部.您可能希望替换ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR为适当的SCREEN_ORIENTATION常量.

一旦我这样做,它在ICS上完美地工作.您没有事件必须调整特定活动的清单.