活动方向更改错误

时间:2018-09-10 13:39:01

标签: java android android-layout screen-orientation device-orientation

我遇到了一个奇怪的错误,以前在Android应用程序中没有见过。当从锁定为肖像模式的活动导航到锁定为横向模式的活动并返回时,原本应该为纵向的活动以纵向模式出现,先进入横向,然后再返回至肖像。

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

Here是该错误的视频,here's a link是复制该错误的确切项目。它发生在多个设备上,因此不会隔离到我的设备上。

问题:

  • 您知道是什么原因造成的吗?
  • 您有什么建议可以解决此问题吗?

我尝试过的事情:

  • 以编程方式设置方向
  • 谷歌搜索,什么也没找到

更新1

我尝试过的其他事情:

  • 将肖像活动设置为“ nosensor”,将风景活动设置为“ landscape”
  • 将肖像活动设置为“ 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错误的输出为:

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

我想现在的问题是,如何确保不会引起方向改变?

1 个答案:

答案 0 :(得分:0)

测试完清单级别定向设置和程序化定向设置的所有不同组合之后。我发现要使onConfigurationChanged函数中的方向正确,您必须在实际开始导航之前设置方向。

对我有用并完全消除了行为的组合是将肖像中我想要的清单中的活动设置为“ nosensor”。然后将要在景观中使用的活动设置为使用

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

,并在发生导航之前,在onBackPressed 中将方向设置回纵向。该部分很重要,一旦触发了导航,然后设置了方向,在某些情况下,当newConfiguration在onConfigurationChanged调用中通过时,它具有错误的方向,然后以某种方式对其发出另一个调用以对其进行纠正已在首次通话中更新。

tl; dr 将您想要的肖像活动的方向设置为“ nosensor”。在onCreate中以编程方式将方向设置为横向。在超级通话之前 上,在onBackPressed中将方向设置回纵向。