Android - 不要在旋转时刷新Google Maps v2

7
当我旋转我的设备时,Google地图v2会刷新。如何防止此刷新发生?我正在在SherlockFragment的选项卡中动态添加地图。
4个回答

16

我通过在AndroidManifest.xml文件中的Activity标签中添加以下代码解决了该问题:

android:configChanges="orientation|screenSize"

编辑(04/28/2017):

来自Android文档

注意:应尽可能避免使用此属性,仅作为最后的手段。有关如何正确处理由于配置更改而导致重启的更多信息,请阅读“处理运行时更改”。

也许您可以查看这个答案,该答案正确地使用FragmentActivityonCreate方法中可用的Bundle保存了SupportMapFragment


2

Emil的评论解释了为什么地图视图被重置。然而,通过清单禁止方向改变并不是好的做法。

你需要以某种方式保留地图片段或保留包含地图片段的片段。在“主机”活动重新创建后,你需要重新将片段附加到活动上,而不是创建一个新的片段。我这里没有代码,但你可以在网上找到有关保留片段的信息。

作为替代方案,你可以将你的地图状态(首先是相机位置)保存在其他地方,并在片段重新创建后恢复它。


如果禁止屏幕方向变化符合应用程序的需求,那么在清单文件中禁止屏幕方向变化是没有问题的。 - Emil Adz
当然可以,但在这种情况下,这似乎是一个懒惰的解决方法,而问题可以通过更优雅的方式轻松解决。如果我们在地图上有带有信息窗口的标记,它们将会侧向显示。此外,操作栏也将侧向显示。谷歌为什么不禁止其地图应用程序中的方向更改,这其中是有原因的。 - fweigl
是的,他们会。但有时您可能不想在横向显示地图。 - Emil Adz
它不适合这个应用的需求。我需要两种方向。 - Anonymous1
我认为是由用户决定在哪种方向上查看地图更好。 - fweigl

0

你不能这样做,因为当配置发生变化(如屏幕旋转)时,Activity会被重新创建,导致地图被刷新。你可以通过使用以下方法来防止Activity旋转:

android:screenOrientation="landscape"

或者

android:screenOrientation="portrait"

在您的地图Activity下的Manifest文件中。
这样可以防止在旋转时重新创建它。

谷歌地图没有这个问题。他们是用开发人员无法访问的代码规避它吗? - Anonymous1
谷歌地图应用程序在设备配置更改时不会旋转。他们正在按照我在答案中描述的方式进行操作。 - Emil Adz
@Ascorbin,我猜你可以添加更多吗? - Emil Adz
地图仍然会刷新,这不是我想要的。 - Anonymous1
1
当我改变设备的方向时,谷歌地图不会显示“灰色框”模式。在填充地图之前,我的应用程序会显示这个“灰色框”模式。 - Anonymous1
显示剩余3条评论

0

很遗憾,你所看到的谷歌地图刷新问题是由于谷歌处理方式引起的

android:configChanges="orientation|uiMode|screenSize|fontScale"  
android:screenOrientation="user" 

在Google地图应用程序的清单文件中的Activity标签上。

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