以程式設計方式鎖定螢幕旋轉

在開發過程中,人們可能會發現在程式碼的特定部分期間鎖定/解鎖裝置螢幕非常有用

例如,在顯示帶有資訊的 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)