1

我正在使用以下代码在用户旋转设备时更改我的活动方向。这第一次工作正常,但不再调用。请纠正我。

@Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);            
        Log.d("ACTIVITY","CHANGING ORIENTATION"); //No i18n
        if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) {
            Log.d(TAG, "ORIENTATION CHANGED TO PORTRAIT"); // No I18N
            setRequestedOrientation(Configuration.ORIENTATION_PORTRAIT);
        } else if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
            Log.d(TAG, "ORIENTATION CHANGED TO LANDSCAPE"); // No I18N
            setRequestedOrientation(Configuration.ORIENTATION_LANDSCAPE);
        }
    }

@Override
    protected void onRestoreInstanceState(Bundle savedInstanceState) {
        Log.d("ACTIVITY","ON RESTORE INSTANCESTATE");   //No i18n
        super.onRestoreInstanceState(savedInstanceState);
    }

    @Override
    protected void onSaveInstanceState(Bundle outState) {
        Log.d("ACTIVITY","ON SAVE INSTANCESTATE");  //No i18n
        super.onSaveInstanceState(outState);
    }
4

1 回答 1

2

使用后,setRequestedOrientation(...);您不再有权获得轮换通知。
如果您想在发生旋转时执行特殊操作,您可能需要使用OrientationEventListener

编辑:
注意:此代码将人像设为 80-90 度且 >= 320,这可以更改。
如果这段代码尚未在那里运行,您可能还需要在 UI 线程上运行 setRequestedOrientation。

你应该这样做:

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

@Override
    public void onOrientationChanged(int rotation) {
        boolean changed = false;

        if (((rotation >= 0) && (rotation <= 80)) || (rotation >= 320)) {
                        setRequestedOrientation(Configuration.ORIENTATION_PORTRAIT);
        } else {
                        setRequestedOrientation(Configuration.ORIENTATION_LANDSCAPE);
        }
    }
};
mOrientationListener.enable();
于 2013-05-20T11:18:59.283 回答