如何仅针对 TabLayout 中的特定片段停止 activity 的旋转?
How to stop the rotation of an activity only for a specific fragment in TabLayout?
我有一个 activity,我在其中添加了一个 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);
}
}
但是它停止了每个片段的旋转。如何解决这个问题?谢谢!
更改您的 onPause
方法以允许您使用 SCREEN_ORIENTATION_UNSPECIFIED:
进行活动中的每个方向
@Override
public void onPause() {
super.onPause();
if (activity != null) {
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
}
}
希望对您有所帮助!
更深入一点:
您不必在 activity 中指定任何内容,只需使用片段即可。
在您的片段中使用如下的 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);
}
}
它应该可以工作
您可以尝试覆盖片段中的 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()
以外的其他地方并且 activity 不会为空,例如。 onAttach()
我有一个 activity,我在其中添加了一个 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);
}
}
但是它停止了每个片段的旋转。如何解决这个问题?谢谢!
更改您的 onPause
方法以允许您使用 SCREEN_ORIENTATION_UNSPECIFIED:
@Override
public void onPause() {
super.onPause();
if (activity != null) {
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
}
}
希望对您有所帮助!
更深入一点:
您不必在 activity 中指定任何内容,只需使用片段即可。
在您的片段中使用如下的 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);
}
}
它应该可以工作
您可以尝试覆盖片段中的 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()
以外的其他地方并且 activity 不会为空,例如。 onAttach()