android屏幕方向混合起来

时间:2013-05-27 15:01:59

标签: android screen-orientation

我的Android应用程序设计为仅景观。我已经把

        android:screenOrientation="landscape"
        android:configChanges="orientation|keyboardHidden|screenSize"

进入清单。 它确实以横向方向发布。这太酷了。 但! 我需要知道设备屏幕大小才能执行一些计算。我已将以下代码添加到onCreate()

    Display display = getWindowManager().getDefaultDisplay();
    Point size = new Point();
    display.getSize(size);
    // utilize size to calculate something...

如果我从纵向启动应用程序,我得到(Google Nexus)size.x = 800,size.y = 1205而不是正确(对于横向)size.x = 1280,size.y = 736。

对我来说,Android需要一些时间才能从纵向切换到横向(因为最终我看到我的应用程序“美化了”)。但是在此切换之前调用onCreate - 它会导致我的计算失败。我的猜测是否正确?

我尝试将计算从onCreate()移到onGlobalLayout()但我仍然按照以下步骤获得了纵向尺寸:

  1. 启动横向应用
  2. 按下睡眠按钮(屏幕变暗)
  3. 旋转至纵向
  4. 按下睡眠按钮(屏幕在呈现解锁屏幕时淡出)
  5. 解锁设备
  6. 我的应用程序唤醒接收纵向方向大小
  7. on next onGlobalLayout()我终于得到了横向大小,但为时已晚。
  8. 我可以完全摆脱纵向吗?

2 个答案:

答案 0 :(得分:2)

我花了好几天同样的问题。正如其他海报所揭示的那样,当从睡眠/锁定屏幕返回时,应用程序被传递到锁定屏幕所具有的相同纵向模式。真正的发现是它经历了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
}

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

答案 1 :(得分:0)

不,你不能。

如果您想获得视图大小,可以覆盖onLayout http://developer.android.com/reference/android/view/View.html#onLayout(boolean,int,int,int,int)