0

将方向锁定为纵向或横向很简单。

<activity android:name=".MyActivity"
           android:screenOrientation="portrait">

或在屏幕旋转时捕获:

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}

但是如何在旋转事件发生之前捕获它呢?如果方向发生变化,我想控制布局上发生的情况,覆盖实际旋转屏幕的默认行为。可能吗?

4

2 回答 2

3

在 onPause() 方法中使用这段代码。当 rotatio 改变时,activty 会重新构建它自己,这意味着再次调用 on-Create 并且之前的活动是 finish();

    int currentOrientation = getResources().getConfiguration().orientation;
    if (currentOrientation == Configuration.ORIENTATION_LANDSCAPE){
        if (display.getRotation() == Surface.ROTATION_0)
        // play with different angles e.g ROTATION_90, ROTATION_180
    }

因此,当旋转发生变化时,将调用以前的活动的 onPause(),在那个阶段你可以决定你想要的新方向。

于 2013-03-04T11:47:37.193 回答
0
  1. setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);通过in强制活动保持在一种模式(例如横向)onCreate(..)

  2. 附加您自己的方向监听器,

    orientationEventListener = new OrientationEventListener(this, SensorManager.SENSOR_DELAY_UI) {

            @Override
            public void onOrientationChanged(int orientation) {
                if (Math.abs(orientation - 90) < 30){
                       // your device orientation has changed, you can update UI                        accordingly, (layout won't rotate).
            }
        };
        orientationEventListener.enable();
    

请记住,如果您这样做,您将在放弃配置更改时收到“反转”的触摸事件的 x 和 y 轴。此外,如果您有一个导航栏,它将保持在原处并且​​不会旋转!

于 2013-10-08T08:27:57.587 回答