以编程方式锁定屏幕旋转

在开发过程中,人们可能会发现在代码的特定部分期间锁定/解锁设备屏幕非常有用

例如,在显示带有信息的 Dialog 时,开发人员可能希望锁定屏幕的旋转以防止对话框被解除,并且当对话框被解除时,重建当前活动以再次解锁对话框。

即使我们可以通过执行以下操作从清单实现旋转锁定:

<activity
    android:name=".TheActivity"
    android:screenOrientation="portrait"
    android:label="@string/app_name" >
</activity>

通过执行以下操作,可以通过编程方式执行此操作:

public void lockDeviceRotation(boolean value) {
    if (value) {
        int currentOrientation = getResources().getConfiguration().orientation;
        if (currentOrientation == Configuration.ORIENTATION_LANDSCAPE) {
            setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE);
        } else {
            setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT);
        }
    } else {
        getWindow().clearFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {
            setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_FULL_USER);
        } else {
            setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR);
        }
    }
}

然后调用以下内容,分别锁定和解锁设备旋转

lockDeviceRotation(true)

lockDeviceRotation(false)