在安卓系统中检测镜像方向的变化

5
通常将设备旋转90度(从竖屏到横屏或反之)会导致配置更改,Activity被销毁和重新创建等操作,因此可以在开始时仅保存Display.getRotation()的值并使用它来工作。
然而,当直接从0度旋转设备到180度(从竖屏到竖屏),或者从90度旋转到270度(从横屏到横屏)时,不会进行配置更改,设备只是重新映射屏幕。这是有道理的,因为布局的宽高比没有改变,也不需要进行更改。但这使得Activity无法检测到这种变化,例如当Surface.ROTATION_90变为Surface.ROTATION_270等。
除了轮询Display.getRotation()之外,是否有更好的方法来检测这种变化?
1个回答

5
您可以使用辅助类OrientationEventListener来实现。例如:
public void onOrientationChanged(int orientation) {
   if (orientation == ORIENTATION_UNKNOWN) return;

   int rotation = activity.getWindowManager().getDefaultDisplay()
         .getRotation();
   int degrees = 0;
   switch (rotation) {
     case Surface.ROTATION_0: ....
     case Surface.ROTATION_90: ....
     case Surface.ROTATION_180: .....
     case Surface.ROTATION_270: .....
   }

}

谢谢你从API中找到这个,我会试一下的。 - S.D.
虽然 OrientationEventListener 中旋转角度的定义与 Surface 类相反,但仍然可以正常工作。 - S.D.
但是这个方法被调用太多次,性能不佳,它会在每个度数变化时调用,毫无意义。 - user924

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接