2

我的 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在此开关之前调用 - 它会破坏我的计算。我的猜测正确吗?

我尝试将计算从 to 移动onCreate()onGlobalLayout()但在执行以下步骤后我仍然得到纵向尺寸:

  1. 横向启动应用程序
  2. 按睡眠按钮(屏幕变暗)
  3. 旋转到纵向
  4. 按睡眠按钮(屏幕淡入呈现解锁屏幕)
  5. 解锁设备
  6. 我的应用醒来后收到纵向尺寸
  7. 在下一个 onGlobalLayout() 上,我终于得到了横向大小,但为时已晚。

我可以完全摆脱纵向吗?

4

2 回答 2

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
}

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

于 2013-12-02T01:13:02.593 回答
0

你不能。

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

于 2013-05-27T15:07:31.860 回答