【问题标题】:Startup orientation when device orientation locked设备方向锁定时的启动方向
【发布时间】:2016-04-18 23:38:31
【问题描述】:

在我的应用程序中,当 System.ACCELEROMETER_ROTATION 指示禁用旋转时,我将 setRequestedOrientation() 与 SCREEN_ORIENTATION_SENSORSCREEN_ORIENTATION_NOSENSOR 一起使用。我认为这就是我应该这样做的方式,但该应用程序在不同设备上的行为不同。我得到了:

  1. 应用方向始终与主屏幕相同,无论是否锁定
  2. 旋转锁定时强制垂直定向,与#1不同
  3. 在应用停止之前表现类似于 #1,然后始终以垂直方向启动,即使设备本身被锁定为横向

#3 是人们抱怨的地方。显然,他们希望“锁定”能够将所有东西保持在相同的方向,而根据文档 System.ACCELEROMETER_ROTATION 不应该锁定任何东西,而只会禁用加速度计检测。不过,看起来有些供应商对此有不同的解释。

行为 #3 是正常现象,还是我应该以某种方式解决的特定设备错误?如何获得锁定的方向或主屏幕的方向?锁定时弄乱方向是否安全?

编辑: 该应用程序根据设备(屏幕纵横比和其他一些东西)决定是否允许在横向和纵向之间切换。在这种情况下,既不是通过清单设置一个固定方向,也不是允许系统处理旋转。现在要接受我自己的答案来结束这个问题。

【问题讨论】:

    标签: android


    【解决方案1】:

    您可以通过清单设置默认方向

    【讨论】:

    • android:screenOrientation="screenOrientation 你想要的"
    【解决方案2】:

    在每个活动的清单中静态强制您的方向。例如,如果您想强制某个活动的“纵向”方向,请将此属性添加到清单文件中的活动标签中:

    android:screenOrientation="portrait"
    

    【讨论】:

    • 强制特定方向非常容易。我更喜欢让应用程序在用户锁定方向时按照用户期望的方式运行,即始终以他们选择将设备锁定到的方向显示。当然,只要这可以安全地实现。
    【解决方案3】:

    你不需要做任何事情。

    如果用户禁用了设备旋转,并且您没有尝试强制特定方向,则您的应用将以他们选择的方向加载。

    您不需要显式设置SCREEN_ORIENTATION_SENSORSCREEN_ORIENTATION_NOSENSOR

    当您在设备上禁用旋转时,它会将首选方向锁定为当前所在的位置。某些启动器(主屏幕)不支持横向,因此即使设备应该锁定为横向,它们仍将纵向显示。当启动一个不锁定方向的应用时,它会变回横向

    【讨论】:

      【解决方案4】:

      想通了。在加速计旋转启用时使用 SCREEN_ORIENTATION_SENSOR,而在未启用时使用 SCREEN_ORIENTATION_USER,在我迄今为止测试过的所有设备上都可以正常工作。

      NOSENSOR 起初似乎是一个合适的选择,但现在看文档,它只说加速度计将被忽略,并且没有关于它解析到什么方向,我想它真的是不确定的。一种无用的选项,有点误导。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-03-17
        • 1970-01-01
        • 2015-11-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多