仅当某些片段可见时,如何更改方向模式?

时间:2014-08-04 10:56:37

标签: android android-fragments android-orientation

我正在构建一个Activity的应用,可以加载不同的Fragments。我希望它保持纵向模式,只有在某些特定Fragments可见时才允许横向显示。

如果我为android:screenOrientation="portrait" Activity设置了android:configChanges="orientation|keyboardHidden" ,则会锁定此模式,我无法找到检测方向更改的方法。

如果我没有使用

设置检测方向更改
androidManifest
<{1>}和

中的

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig); 
}

在我的Activity中检测到更改,每次更改方向时都会重新创建Activity

如何保持我的Activity处于纵向模式(无需在方向更改时重新绘制),只有在给定的Fragment可见时才重绘它?

2 个答案:

答案 0 :(得分:0)

在您的情况下,请不要在基本活动中使用android:screenOrientation="portrait"

覆盖每个片段中的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_LANDSCAPE);
        }
    }

答案 1 :(得分:0)

我发现最简单的方法是添加

@Override
public void onResume (){
    super.onResume();
    getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
}

@Override
public void onPause (){
    super.onPause();
    getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
Fragments中的

应根据方向更改布局。