>我有一个活动,我在其中添加了TabLayout
。每个选项卡包含一个片段。我只想在单个片段中阻止旋转,而不是在所有片段中阻止旋转。这是我在单个片段中使用的代码:
@Override
public void onResume() {
super.onResume();
if (activity != null) {
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
}
@Override
public void onPause() {
super.onPause();
if (activity != null) {
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
}
但它阻止了每个片段的旋转。如何解决这个问题?谢谢!
您可以尝试覆盖片段中的setUserVisibleHint(boolean isVisibleToUser)
以了解片段的实际显示时间,例如:
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if(isVisibleToUser && null != activity) {
activity.setRequestedOrientation(
ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
else if(!isVisibleToUser && null != activity) {
activity.setRequestedOrientation(
ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
}
}
https://developer.android.com/reference/android/app/Fragment.html#setUserVisibleHint
或者将其放在onResume()/onPause()
以外的其他地方,并且活动不会为空,例如。 onAttach()
使用SCREEN_ORIENTATION_UNSPECIFIED更改onPause
方法以允许活动中的每个方向:
@Override
public void onPause() {
super.onPause();
if (activity != null) {
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
}
}
希望这有帮助!
更深入一点:
您不必在活动中指定任何内容,只需使用片段即可。
在您的片段中使用 onResume 和 onPause 方法,如下所示:
@Override
public void onResume() {
super.onResume();
if (activity != null) {
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
}
@Override
public void onPause() {
super.onPause();
if (activity != null) {
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
}
}
它应该工作