活动方向更改错误

我遇到了以前在 Android 应用程序中从未见过的奇怪错误。当从锁定在纵向模式的活动导航到锁定在横向模式的活动并返回时,应该处于纵向模式的活动以纵向模式出现,转到横向然后返回纵向。

当设备平放在桌子上而没有实际方向变化时,就会发生这种情况。我正在使用两个单独的活动,这是我在项目中唯一的代码。

这是该错误的视频,这是重现此错误的确切项目的链接。它发生在多个设备上,因此它不会与我的设备隔离。

问题:

  • 你知道是什么原因造成的吗?

  • 有什么可以推荐的来解决这个问题吗?

我尝试过的事情:

  • 以编程方式设置方向

  • 谷歌搜索并没有找到任何东西

更新 1

我尝试过的更多事情:

  • 将肖像活动设置为“nosensor”,将风景活动设置为“风景”

  • 将纵向活动设置为“nosensor”并在 onCreate 中以编程方式设置横向活动

更新 2

我一直在使用上面链接的项目,只是做了一些覆盖来注销正在发生的一切。我发现当 onConfigurationChanged 被调用时,它会在横向和纵向方向之间产生轻微的抖动。不做摆幅的后退导航的输出是:

D/class com.mdk_studio.orientationbugtests.MainActivity: onStateNotSaved

D/class com.mdk_studio.orientationbugtests.MainActivity: onRestart

D/class com.mdk_studio.orientationbugtests.MainActivity: onWindowFocusChanged

shimmy bug 的输出是:


D/class com.mdk_studio.orientationbugtests.MainActivity: onStateNotSaved

D/class com.mdk_studio.orientationbugtests.MainActivity: onRestart

D/class com.mdk_studio.orientationbugtests.MainActivity: onWindowFocusChanged

D/class com.mdk_studio.orientationbugtests.MainActivity: onConfigurationChanged

D/class com.mdk_studio.orientationbugtests.MainActivity: onConfigurationChanged

我想现在的问题变成了,如何确保不会调用方向更改?


红糖糍粑
浏览 176回答 1
1回答

慕尼黑8549860

在测试了清单级别方向设置和程序化方向设置的所有不同组合之后。我发现为了使 onConfigurationChanged 函数中的方向不会出错,您必须在实际开始导航之前设置方向。对我有用并完全消除行为的组合是将清单中我想要的纵向活动设置为“无传感器”。然后将我想要的横向活动设置为横向使用setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);并在导航发生之前在 onBackPressed 中将方向设置回纵向。这部分很重要,一旦导航被触发,然后你设置了方向,在某些情况下,当 newConfiguration 在 onConfigurationChanged 调用中通过时,它的方向错误,然后它以某种方式发出另一个调用以在它之后更正它在第一次通话时更新。tl;dr 将您想要的纵向活动的方向设置为“无传感器”。在 onCreate 中以编程方式将方向设置为横向。在超级调用之前,在 onBackPressed 中将方向设置回纵向。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java