我的 Android 应用程序设计为仅限横向。我已经放了
android:screenOrientation="landscape"
android:configChanges="orientation|keyboardHidden|screenSize"
进入 list 。
它确实是横向启动的。这很酷。
但!
我需要知道设备屏幕尺寸才能执行一些计算。我已将以下代码添加到 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()
,但经过以下步骤后我仍然得到纵向尺寸:
- 横向启动应用
- 按下 sleep 按钮(屏幕变暗)
- 旋转至纵向
- 按 sleep 按钮(屏幕淡出显示解锁屏幕)
- 解锁设备
- 我的应用醒来时会收到纵向尺寸
- 在接下来的 onGlobalLayout() 中,我终于得到了横向尺寸,但为时已晚。
我可以完全摆脱纵向吗?
最佳答案
我花了几天时间来解决同样的问题。正如其他海报所揭示的那样,当从 sleep /锁定屏幕返回时,该应用程序将采用与锁定屏幕相同的纵向模式。真正的发现是它经历了 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
}
这对我有帮助。希望这对您有帮助。
关于Android 屏幕方向混合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16775871/