setRequestedOrientation(...)阻止传感器的配置更改

时间:2015-09-16 12:55:03

标签: android screen-orientation

我正在尝试根据按下按钮更改屏幕方向,以及聆听传感器的配置更改。

我的代码如下:

private boolean mFullScreen = false;
...

/**
* This method is used by button to toggle orientation
*/
public void toggleFullScreen() {
    mFullScreen = !mFullScreen;
    switchFullScreen();
}

private void switchFullScreen() {
    if (mFullScreen) {
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE);
    } else {
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT);
    }
}

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    switch (newConfig.orientation) {
        case Configuration.ORIENTATION_LANDSCAPE: {
            getSupportActionBar().hide();
            getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
            break;
        }
        case Configuration.ORIENTATION_PORTRAIT: {
            getSupportActionBar().show();
            getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
            break;
        }
    }
}

在清单中:

<activity
    android:name="Activity"
    android:configChanges="screenSize|orientation />

首先检测到传感器的配置更改,但是一旦从按钮切换了方向,就不会检测到它。

2 个答案:

答案 0 :(得分:0)

只有ActivityInfo.SCREEN_ORIENTATION_SENSORActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR您的活动才会对传感器做出反应。将屏幕方向设置为纵向或横向会阻止旋转,这是它们的主要目的

答案 1 :(得分:0)

您可以这样做:

private void switchFullScreen() {
    if (mFullScreen) {
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE);
    } else {
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT);
    }
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
}