当屏幕方向改变时,Activity 一直重新启动

3

当屏幕旋转或用户在手机上滑动键盘时,如何防止活动重新启动?这可能吗?有解决方法或其他方法吗?欢迎提供所有相关答案。

2个回答

7

您可以通过在manifest.xml文件中的activity元素中声明一个特定属性来实现此操作。该元素称为android:configChanges,您需要注册orientation的字符串值。

<activity android:name=".MyActivity"
      android:configChanges="orientation"
      android:label="@string/app_name">

根据文档
现在,当这些配置之一发生变化时,MyActivity不会重新启动。相反,Activity将接收到一个onConfigurationChanged()调用。此方法传递了一个指定新设备配置的Configuration对象。通过读取Configuration中的字段,您可以确定新的配置,并通过更新界面中使用的资源来进行适当的更改。在调用此方法时,Activity的Resources对象已更新为基于新配置返回资源,因此您可以轻松地重置UI元素而无需系统重新启动Activity。
这样做会导致您的Activity不会重新启动,并且回调onConfigurationChanged()以便自己处理更改。

你能给我一些示例代码吗?我似乎无法让它工作。 - gsfd
你似乎无法让它正常工作,是什么问题呢?你能否通过编辑来更新你的问题?如果你能提到你已经尝试过什么以及具体哪些部分出了问题,那将会很有帮助。 - nicholas.hauschild
3
除了“屏幕方向”,根据您的问题,您可能还想添加相关的键盘配置更改以处理键盘操作,因此您可能需要设置的值是“orientation | keyboard | keyboardHidden”。就像尼古拉斯所说,您可能需要自己处理onConfigurationChanged()。 - momo

0

如果你阅读这里的文档,你会发现你可以在你的清单文件中指定以下内容:

<activity ...
    android:configChanges="orientation">

一旦你拥有了这个,你就可以实现onConfigurationChanged()方法来接收关于方向变化的通知,或者只使用基类的实现。


2
@Arvin 这两个答案相差4分钟。这个答案不太可能是“抄袭”,只是同时发布的等效答案。这种情况经常发生,也没什么大不了的。除非后来的回答确实有用,否则人们通常会更多地赞同早期的答案。你的评论听起来像是因为自己的答案被踩而心生不满。 - Laurence Gonsalves

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