Android: 如何保持Activity启动时的屏幕方向不变

4

我知道如何锁定一个活动在特定的方向(在 AndroidManifest.xml 中):

android:screenOrientation="landscape|portrait"

我知道如何通过程序锁定特定方向:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT)

但是,我该如何将活动锁定在启动时的方向上?例如,如果它以纵向开始,则应该保持这种方式。

谢谢!


你的意思是如果用户把手机竖着拿,应用程序应该在竖屏模式下启动?我认为默认情况下它已经这样做了... - Barney
我遇到了同样的问题,请给我提供解决方案。 - Hemantvc
3个回答

5

在应用程序启动时使用getResources().getConfiguration().orientation,然后像上面一样以编程方式设置方向。该方法将返回ORIENTATION_LANDSCAPEORIENTATION_PORTRAIT


这个几乎完成了,问题在于有两种横向模式:SCREEN_ORIENTATION_LANDSCAPE和SCREEN_ORIENTATION_REVERSE_LANDSCAPE。竖向也是一样的。因此,由于getResources().getConfiguration().orientation只返回竖屏或横屏(但不包括反向),我可能会弄错。 - Menny

1
发现一个解决方案:
switch (((WindowManager) getSystemService(WINDOW_SERVICE)).getDefaultDisplay().getRotation()) {
  case Surface.ROTATION_90:
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
    break;
  case Surface.ROTATION_180:
    setRequestedOrientation(9/* reversePortait */);
    break;
  case Surface.ROTATION_270:
    setRequestedOrientation(8/* reverseLandscape */);
    break;
  default :
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}

发现它在这里

0

这是我的做法:

android:screenOrientation="portrait"
android:configChanges="keyboard|keyboardHidden|orientation"

在清单文件中的活动


1
这不好:方向将始终为纵向。我希望它保持活动启动时的方向,可能是横向。 - Menny

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接