实际上你不应该阻止 Activity 重新启动。由于多种原因,有必要在轮换更改后重新创建活动。其中之一是布局必须膨胀以处理更改的屏幕尺寸和类似的事情(很容易想象纵向模式下的布局与横向模式下的布局完全不同)。
但是,有一种方法可以告诉系统您自己处理屏幕变化。因此更改清单中的行
android:configChanges="orientation|keyboardHidden"
to
android:configChanges="orientation|screenSize"
那么该活动将不会被重新创建。您将通过以下方式收到回调onConfigurationChanged() http://developer.android.com/reference/android/app/Activity.html#onConfigurationChanged(android.content.res.Configuration)方法,以便您可以在方向改变时执行某些操作。如果您不想在配置更改时执行任何操作,则不要覆盖onConfigurationMethod()
在您的活动中。读Android 开发者 API 指南中的此部分 http://developer.android.com/guide/topics/resources/runtime-changes.html#HandlingTheChange了解更多信息。
我从那里得到这个这个答案 https://stackoverflow.com/a/5913370/5247502。答案中还有两种方法,但我认为上面描述的方法最适合您的情况。
EDIT:也许你必须添加keyboard|keyboardHidden
to the android:configChanges
属性也是如此,如中所述这个答案 https://stackoverflow.com/a/13149621/5247502
EDIT #2:如果您想检索设备的当前方向,您可以调用
Activity.getResources().getConfiguration().orientation
这将返回常量ORIENTATION_PORTRAIT
or ORIENTATION_LANDSCAPE
.
如果您对精确的旋转角度感兴趣,请使用
int rotation = getWindowManager().getDefaultDisplay().getRotation();
并使用所描述的开关盒之类的东西来实现差异化here https://stackoverflow.com/a/23930318/5247502.
确定设备旋转的第三种方法是getRequestedOrientation()
这将返回一个定义在中的常量文档 http://developer.android.com/reference/android/content/pm/ActivityInfo.html#screenOrientation