我正在构建一个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
可见时才重绘它?
答案 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
中的应根据方向更改布局。