在方向发生之前捕获方向更改事件

时间:2013-03-04 11:33:31

标签: android layout rotation orientation

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

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

或在屏幕旋转时捕捉:

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

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

2 个答案:

答案 0 :(得分:2)

在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(),并且在该阶段您可以通过新的方向决定您想要的内容。

答案 1 :(得分:0)

  1. 通过setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

  2. 中的onCreate(..)强制活动保持一种模式(例如风景)
  3. 附加您自己的方向监听器,

    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();
    
  4. 请记住,如果你这样做,你会收到x&amp;当您放弃配置更改时,y轴的触摸事件“反转”。此外,如果您有一个导航栏,它将保持原样,也不会旋转!