我有一个应用程序,我只想在肖像模式下使用,所以我定义了

但当我打开硬件QWERTY keyboard(而不是虚拟键盘)时,HTC G1手机出现了问题.我的活动保持在纵向模式,但似乎重新启动并失go 所有状态.HTC Hero版本不会出现这种情况.

我的应用程序相当大,所以我不希望它在键盘打开时重新启动并丢失所有状态.我怎么才能防止这种情况发生呢?

推荐答案

Update April 2013: Don't do this. It wasn't a good idea in 2009 when I first answered the question and it really isn't a good idea now. See this answer by hackbod for reasons:

Avoid reloading activity with asynctask on orientation change in android

在你的AndroidManifest中添加android:configChanges="keyboardHidden|orientation".xml.这会告诉系统您将自己处理哪些配置更改——在本例中,您什么也不做.

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

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

然而,您的应用程序可以在任何时候被中断,例如被电话中断,所以您确实应该添加代码来保存应用程序在暂停时的状态.

Update:从Android 3.2开始,您还需要添加"屏幕大小":

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

来自开发人员指南 Handling the Configuration Change Yourself

注意:从Android 3.2(API级别13)开始,"屏幕大小"

Android相关问答推荐

列表的可变状态未正确更新

Android Google Select 帐户总是会产生结果代码0

listOf(listOf(字符串))在lazyArchitect(lazyStream)中合成

如何在点击按钮时将字符串插入到文本字段中的光标位置?

如何在"不同活动"中添加不同按钮?

如何在Android Studio的LinearLayout中禁用阴影

如何从LazyColumn中的图标异步获取可绘制的加载?

Play Google上发布的一款应用的房间数据库迁移

如何正确创建可拖动的浮动视图?

Android 构建失败:找不到 flexbox2.0.1.aar

Android Jetpack Compose全宽度抽屉优化

列表更改时,RecyclerView 中的列表不会更新

Android Studio 复制类 kotlin

在 Jetpack Compose 中使用 ViewModel 实现 startActivity 的最佳实践

错误:构建 react-native 应用程序时包 com.facebook.react.bridge 不存在

Jetpack compose 未解决的参考错误

Jetpack Compose:SpanStyle 的 TextAlign(垂直居中)

有人可以向我解释这两个结果有什么区别吗?

为什么使用 React Native 和 expo 创建的 APK 体积这么大?

如何将私有 mutableStateOf 分配给 Android Jetpack 中的 State 变量?