android屏幕方向混淆

android屏幕方向混淆,android,screen-orientation,Android,Screen Orientation,我的android应用程序是专为景观设计的。我把 android:screenOrientation="landscape" android:configChanges="orientation|keyboardHidden|screenSize" 进入舱单。 而且它确实是以景观为导向的。这很酷。 但是 我需要知道设备屏幕的大小来执行一些计算。我在onCreate()中添加了以下代码: 如果我从纵向启动应用程序,我会得到(谷歌Nexus)大小。x=800,大小。

我的android应用程序是专为景观设计的。我把

        android:screenOrientation="landscape"
        android:configChanges="orientation|keyboardHidden|screenSize"
进入舱单。 而且它确实是以景观为导向的。这很酷。 但是 我需要知道设备屏幕的大小来执行一些计算。我在
onCreate()
中添加了以下代码:

如果我从纵向启动应用程序,我会得到(谷歌Nexus)大小。x=800,大小。y=1205,而不是正确的(横向)大小。x=1280,大小。y=736

在我看来,Android需要一些时间从纵向切换到横向(因为最终我看到我的应用程序“景观”)。但是在这个开关之前调用了
onCreate
,它破坏了我的计算。我的猜测正确吗

我尝试将计算从
onCreate()
移动到
onGlobalLayout()
,但经过以下步骤后,我仍然得到了纵向尺寸:

  • 在景观中发布应用程序
  • 按下睡眠按钮(屏幕变暗)
  • 旋转到纵向
  • 按下睡眠按钮(屏幕在显示解锁屏幕时淡出)
  • 解锁设备
  • 我的应用程序醒来时收到纵向尺寸
  • 在下一个onGlobalLayout()中,我终于得到了景观大小,但为时已晚
  • 我能完全摆脱纵向吗?

    不,你不能

    如果要获取视图尺寸,可以覆盖onLayout
    ,int,int,int,int)

    我花了好几天的时间研究这个问题。正如其他海报所揭示的那样,当从睡眠/锁定屏幕返回时,该应用程序将获得与锁定屏幕相同的肖像模式。真正的发现是它经过了onResume()和onWindowFocusChanged两次-一次是纵向模式,然后是横向模式。在执行屏幕初始化之前,我在onResume()和onWindowFocusChanged()中使用了以下代码进行检查:

    int gW = view.getMeasuredWidth();
    int gH = view.getMeasuredHeight();
    if (gW > gH) {// landscape!
    // the height will be set at this point
        // so reinitialize your screen here
    }
    

    它帮助了我。希望这对你有帮助

    我无法复制这个问题。在我的Nexus 4上,活动锁定为横向,getSize()返回1196x768,即1280减去导航栏的大小。你还做了什么不寻常的事吗,也许打电话吧?我也没看到从肖像画到风景画的转变。在清单中指定方向时不应发生这种情况。@devconsole它可以像这样复制:1。使设备睡眠2。保持“肖像”3。从eclipse启动应用程序->解锁屏幕显示4。解锁你的设备5。观察size.xandroid:configChanges(请参阅相关内容)。在这种情况下,我无法获得第二个具有“正确”维度的onCreate。至于“学术”——猜猜如果用户直接从GooglePlay在肖像定位中启动我的应用会发生什么
    int gW = view.getMeasuredWidth();
    int gH = view.getMeasuredHeight();
    if (gW > gH) {// landscape!
    // the height will be set at this point
        // so reinitialize your screen here
    }