如何禁用Android上的方向更改?

我有一个应用程序,我只是想在肖像模式下使用,所以我在清单XML中定义了android:screenOrientation =“portrait”。 这适用于HTC Magic手机(并防止其他手机的方向更改)。

但我在打开硬件QWERTY键盘(不是虚拟键盘)时遇到了HTC G1手机的问题。 我的活动保持纵向模式,但似乎重新启动并失去其所有状态。 HTC Hero版本不会发生这种情况。

我的应用程序非常大,所以我不希望它重新启动并在键盘打开时丢失所有状态。 我怎样才能防止呢?


2013年4月更新:不要这样做。 2009年,当我第一次回答这个问题时,这不是一个好主意,现在它确实不是一个好主意。 由hackbod查看此答案的原因如下:

避免使用asynctask重新加载android中的方向更改

android:configChanges="keyboardHidden|orientation"到您的AndroidManifest.xml中。 这告诉系统你将要处理的配置变化 - 在这种情况下,什么也不做。

<activity android:name="MainActivity"
     android:screenOrientation="portrait"
     android:configChanges="keyboardHidden|orientation">

有关更多详细信息,请参阅开发人员参考configChanges。

但是,您的应用程序可能会随时中断,例如通过电话,所以您应该添加代码以在应用程序暂停时保存应用程序的状态。

更新:从Android 3.2开始,您还需要添加“screenSize”:

<activity
    android:name="MainActivity"
    android:screenOrientation="portrait"
    android:configChanges="keyboardHidden|orientation|screenSize">

从开发者指南处理配置会改变你自己

警告:从Android 3.2(API级别13)开始,当设备在纵向和横向之间切换时,“屏幕大小”也会发生变化。 因此,如果要在开发API级别13或更高级别时(由minSdkVersion和targetSdkVersion属性声明)防止由于方向更改导致运行时重新启动,则除“方向”值外,还必须包含“screenSize”值。 也就是说,你必须声明android:configChanges="orientation|screenSize" 。 但是,如果您的应用程序的目标级别为12或更低,则您的活动始终会自行处理此配置更改(即使在Android 3.2或更高版本的设备上运行,此配置更改也不会重新启动您的活动)。


您需要将AndroidManifest.xml修改为Intrications(之前为Ashton),并确保该活动处理您想要处理的onConfigurationChanged事件。 这是它应该看起来的样子:

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}

我总是发现你需要两个

android:screenOrientation="nosensor" android:configChanges="keyboardHidden|orientation"
链接地址: http://www.djcxy.com/p/50591.html

上一篇: How do I disable orientation change on Android?

下一篇: How to detect programmatically when a user enables a widget in Today View