Android 屏幕方向混合

标签 android screen-orientation

我的 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(),但经过以下步骤后我仍然得到纵向尺寸:

  1. 横向启动应用
  2. 按下 sleep 按钮(屏幕变暗)
  3. 旋转至纵向
  4. 按 sleep 按钮(屏幕淡出显示解锁屏幕)
  5. 解锁设备
  6. 我的应用醒来时会收到纵向尺寸
  7. 在接下来的 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/

相关文章:

android - Gradle 错误 : duplicate entry: com/android/volley/AuthFailureError. 类

c# - 如何在 UWP 应用程序中锁定平板电脑屏幕旋转?

ios - 如何为某些 View Controller 锁定 iPhone 的方向 - Swift?

android - 如何将数据从一个AsyncTask发送到另一个AsyncTask?[视频系统]

android - 在 Android 中为 ADB 部署的应用程序授予权限

android - 在移动设备上, Bootstrap 选项卡上的卡片图像超出了屏幕的右边缘

javascript - 为 Phonegap/Cordova iOS 应用强制执行正确的方向横向模式

java - 方向更改时 fragment 重新启动

android - 你如何防止安卓屏幕向侧面转动?

java - 如何创建 SQLiteDatabase 并使用它来填充微调器?