5

通常将设备旋转 90 度,(纵向到横向或反向)会导致配置更改,Activity 被销毁并重新创建等,因此它可以只保存Display.getRotation()启动时的值并使用它。

但是,当直接从 0 到 180(纵向到纵向)或 90 到 270(横向到横向)旋转设备时,没有进行任何配置更改,设备只是重新映射屏幕。这是有道理的,因为布局的纵横比没有改变,也不需要改变。但这使得 Activity 无法检测到此类更改何时发生,即何时发生Surface.ROTATION_90Surface.ROTATION_270

除了轮询Display.getRotation(),有没有更好的方法来检测这种变化?

4

1 回答 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: .....
   }

}
于 2013-02-03T19:04:05.877 回答