旋轉建議

在 Android 8.0 中,使用者可以切換自動旋轉和直向旋轉模式 開啟「快速設定」方塊或「顯示」設定。在 Android 中 9,我們更新了 肖像旋轉模式,只要固定 Google 地球的 目前螢幕旋轉 (即使裝置位置變更也一樣)。使用者可觸發 視需要按一下導覽列的新按鈕,手動旋轉。 我們將肖像模式重新命名為旋轉鎖定,並會在自動旋轉時啟動 已關閉。自動旋轉模式沒有任何變更。

當裝置為旋轉鎖定模式時,使用者可以鎖定螢幕 上方可見活動 (假設目前的系統) 支援的旋轉功能 限制)。如果上方的活動可以在 旋轉鎖定模式時,也會提供相同的選項, 根據 Activity 的 screenOrientation,某些例外情況 以及環境敘述

旋轉鎖定模式的運作方式:在裝置旋轉時,導覽列中顯示按鈕 並輸入變更內容為此,裝置的方向感應器必須保持啟用狀態 也會影響這項設定輕觸這個按鈕可有效設定使用者旋轉角度 偏好設定 (Settings.System.USER_ROTATION)。WindowManager 會使用這個 以及熱門活動與系統狀態的其他詳細資料 來變更系統旋轉設定WindowManager 繼續使用使用者旋轉功能 系統移動至 其他活動。

這張 GIF 顯示手機橫向擺放,且畫面位於
       縱向。系統會顯示圖示,詢問使用者是否要
       將螢幕方向變更為橫向
圖 1. 旋轉建議按鈕和「滑動」 「在首頁按鈕上向上滑動」。手勢

在活動之間移動時,應維持使用者旋轉偏好設定。 不過,由於大多數手機使用者只想橫向瀏覽 我們為一段短暫的時期添加了自然方向偏誤。使用者旋轉 每當系統傳回 系統旋轉會變更裝置的自然方向對於大多數手機 裝置的自然方向為直向 (0o)。正在重設使用者旋轉設定 通常在使用僅限直向的應用程式、鎖定手機或 返回啟動器工作區。

過去十年來,使用者的輪替互動行為並沒有太多的改變。位使用者 如果此功能在旋轉後逐漸消失,可能會難以發現 以及按鈕在導覽列中的位置因此,我們加入了 「旋轉」按鈕,在按鈕出現時醒目顯示。簡介 系統只會針對前幾個按鈕互動發生模式行為 簡介模式已停用。

來源

新增對旋轉建議的支援 Android 9.大多數的變更包含在 。

  • services/.../server/policy/PhoneWindowManager.java:
    • 正在使用「WindowOrientationListener」輸出內容的掛鉤 (MyOrientationListener,負責監控 感應器,判斷裝置是否已旋轉)
    • WindowOrientationListener 保持啟用狀態,即使 自動旋轉功能已停用 (請參閱 needSensorRunningLp())
    • 根據使用者旋轉偏好計算系統旋轉角度,頂端 活動 screenOrientation 設定和系統狀態 (請參閱 rotationForOrientationLw())
    • 判斷上方的活動是否能旋轉至指定的旋轉角度 (請參閱 isRotationChoicePossible())
  • SystemUI/.../statusbar/phone/NavigationBarFragment:
    • 可決定是否在旋轉時顯示導覽列按鈕 來自 PhoneWindowManager 的建議回呼 (請參閱 onRotationProposal())
    • 處理隱藏旋轉導覽列按鈕的時機 (請參閱 setRotateSuggestionButtonState(false))
    • 處理按鈕逾時,包括 導覽列處於隱藏狀態 (通常在全螢幕模式中)
    • 在使用者返回裝置的自然模式時重設使用者偏好設定 方向 (mRotationWatcher)
    • 為導覽列按鈕動畫挑選適當的樣式。 已套用至「NavigationBarView」 (請參閱 onRotationProposal())
    • 加入簡介模式邏輯,包括特殊動畫 (請參閱參考資料: Settings.Secure.NUM_ROTATION_SUGGESTIONS_ACCEPTED)
    • 實作 enable2 旋轉標記 (請參閱 disable())
  • SystemUI/.../statusbar/phone/NavigationBarView.java:
    • 樣式按鈕圖示動畫,用於比對待旋轉項目 (請參閱 updateRotateSuggestionButtonStyle())
    • 處理按鈕顯示設定變更 (請參閱 setRotateButtonVisibility(),包括要隱藏的邏輯 旋轉按鈕 (如果已啟用特定無障礙服務) (考慮在最右側的導覽列按鈕堆疊排名)
  • SystemUI/res/layout/menu_ime.xml:
    • 加入用於旋轉按鈕的新 KeyButtonView。 堆疊在選單和輸入法編輯器/鍵盤選擇工具上方,但位於 無障礙工具按鈕
  • SystemUI/res/drawable/ic_sysbar_rotate_button.xml:
    • 複雜 AnimatedVectorDrawable,用於製作 旋轉導覽列按鈕
    • 樣式 (在 SystemUI/res/values/styles.xml 中) 的用途如下 設定旋轉的起始和結束角度,這樣就可以顯示相同的可繪項目 為各種起始和結束旋轉的動畫效果
    • 圖示色調是透過 TintedKeyButtonDrawable 設定

實作

Android 9 內含所有必要變更, 輪替建議功能 使用軟體瀏覽鍵 (返回、主畫面等) 的裝置。

利用硬體瀏覽鍵建立裝置的裝置製造商, 如要實作這項功能,必須設計並實作自己的系統 UI 預設用途或功能停用建議所有引進的表面 操作時,只要裝置電量 90o 或 180o,可方便使用 並且可快速取用有鑑於此 (與輸入法編輯器/鍵盤挑選器不同) 不建議使用。

使用這項功能的硬體需求與需求條件相同 才能使用自動旋轉

確保導入方式維持一致的使用者旋轉偏好設定 (Settings.System.USER_ROTATION) 已重設為裝置的自然模式 並在系統基於任何原因變更裝置的自然旋轉時旋轉 自動旋轉功能關閉時提供的導入方式會執行此功能 (請參閱 NavigationBarFragment.mRotationWatcher)。

StatusBarManager.disable2 中有一個新旗標要暫時顯示 防止顯示旋轉建議。詳情請見 StatusBarManager.DISABLE2_ROTATE_SUGGESTIONS。這個標記必須是 尊重所有實作中的高度,因為重要的系統應用程式會使用 設定精靈。提供的導入方式支援這項功能 (詳情請參閱 NavigationBarFragment.disable())。

強烈建議您啟用這項功能,並追蹤 Android 開放原始碼計畫的後續情況 導入。我們的目標是讓輪替體驗 模擬現今大多數手機的使用體驗 請切換自動旋轉與肖像鎖定模式

自訂

由於旋轉建議只會在旋轉鎖定模式下顯示 (關閉自動旋轉), 您可以選擇是否要在 選擇關閉自動旋轉功能詳情請見 def_accelerometer_rotation 英吋 SettingsProvider/res/values/defaults.xml即可套用預設變更。

在自動旋轉功能啟用或未啟用時,使用者可以輕鬆變更設定 (不論預設設定為何) 透過快速設定或顯示設定中的旋轉圖塊。

驗證

如要進行測試,只要修改管制位置來關閉及開啟這項功能, Settings.Secure 的值。最簡單的方式是執行 從具有特殊權限的 ADB 執行個體擷取以下指令:

adb shell settings put secure show_rotation_suggestions <x>

將 x 設為 0 關閉,將 1 設為開啟。

如要進行測試,只要修改相關的 Settings.Secure 的值。最簡單的方式是執行 從具有特殊權限的 ADB 執行個體擷取以下指令:

adb shell settings put secure num_rotation_suggestions_accepted 0