【问题标题】:How to detect landscape left (normal) vs landscape right (reverse) with support for naturally landscape devices?如何在支持自然横向设备的情况下检测横向左侧(正常)与横向右侧(反向)?
【发布时间】:2011-07-02 14:39:33
【问题描述】:

我想做的事:

  • 检测设备的当前布局方向(纵向、横向-左、纵向(倒置)、横向-右)
  • 区分两种可能的横向模式(左侧倾斜,右侧倾斜)
  • 支持自然状态为横向的设备(for examplediscussed here
  • 支持getRotation())

澄清一下,我想知道布局当前的方向。布局的底部是哪个方向?是纵向的吗?是横向的吗?风景是左还是右?等等

我能找到的最接近的是Activity.getResources().getConfiguration().orientation,但它只返回三个可能的值。 ORIENTATION_LANDSCAPE、ORIENTATION_PORTRAIT 或 ORIENTATION_SQUARE。它没有说明是哪种景观。

所以,然后我想,如果我能获得设备的方向值(如 90、180、270 等)并将其与上述配置值进行比较,我就能弄清楚。例如,如果配置值为 ORIENTATION_LANDSCAPE,方向为 270,我可以判断它处于反向横向模式。但是,似乎没有一种简单的方法来获取方向值。我可以实现OrientationEventListener,但这似乎有点过头了,因为我只需要在特定时间获取一次值,而不是一直获取。

Display 类中有两个值,但 getOrientation 已弃用,getRotation 仅适用于 2.2 及更高版本。

现在,即使我确实得到了这个值,仍然存在自然横向设备的问题。这意味着它们的 0 值将是横向而不是纵向。所以我还需要一个确定的方法来判断哪个(横向左、横向或纵向)对应于 0。

在 SO 上有很多关于方向和类似问题的帖子,但我还没有看到任何将所有这些问题都考虑在内的帖子。有人知道吗?

说完了,我想要像 Activity.getResources().getConfiguration().orientation 这样的东西,但要知道它是哪种横向模式。

【问题讨论】:

    标签: android rotation orientation landscape


    【解决方案1】:

    直到 2.2 才支持右横向。 您需要在选项或其他内容中选择

    【讨论】:

    • 支持是什么意思?我有一个 2.1 设备(和模拟器),可以旋转到任一横向模式。
    • @littleFluffyKitty 很遗憾,这是公认的答案,因为它并没有真正回答问题(这是一个很好的问题)。 FWIW,getOrientation 等同于 getRotation,弃用只是因为它在 2.2 中被重命名。该功能自 API 级别 1 起就已存在。
    【解决方案2】:

    我设法克服这个问题(不使用 API 8)的唯一方法是注册到 SensorManager (Sensor.TYPE_ACCELEROMETER) 并获取 onSensorChanged 事件。

    我注意到,当您的屏幕处于横向模式时,您会在 latheral (x) 轴上获得接近 -9 (g) 或 +9 (g) 的值。 你可以只检查正面或负面,但你需要保存状态,以防设备面朝上放回桌子上

    您的代码 (sn-p) 应大致如下所示:

    private float mShiftAngle = 0;
    
    public void onSensorChanged(SensorEvent event) {
        if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
            aValues = event.values; 
            int deviceRot = getResources().getConfiguration().orientation; 
            if (deviceRot == Configuration.ORIENTATION_LANDSCAPE) {
                if (Math.abs(aValues[0])>4)
                    mShiftAngle = (aValues[0]>0 ? 90 : -90);
            }
            else 
                mShiftAngle = 0;       
        }
    }
    

    对我有帮助,希望对你有帮助。

    【讨论】:

      猜你喜欢
      • 2014-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-16
      • 2013-08-05
      相关资源
      最近更新 更多