Launcher3中有一個跟Launcher狀態相關的類,叫LauncherState
LauncherState
是 Launcher3 中定義各種用戶界面狀態的抽象基類。你可以把它想象成一個狀態機,定義了 Launcher 可能處于的不同視覺和交互模式,例如主屏幕、所有應用列表、最近任務概覽等。StateManager
類負責管理這些狀態之間的切換和過渡動畫。
LauncherState 中定義的主要狀態
LauncherState.java
文件中定義了多個核心狀態,每個狀態對應 Launcher 的一種界面布局和交互模式:
/*** TODO: Create a separate class for NORMAL state.*///src/com/android/launcher3/LauncherState.javapublic static final LauncherState NORMAL = new LauncherState(NORMAL_STATE_ORDINAL,LAUNCHER_STATE_HOME,FLAG_DISABLE_RESTORE | FLAG_WORKSPACE_ICONS_CAN_BE_DRAGGED | FLAG_HAS_SYS_UI_SCRIM) {@Overridepublic int getTransitionDuration(Context context, boolean isToState) {// Arbitrary duration, when going to NORMAL we use the state we're coming from instead.return 0;}};/*** Various Launcher states arranged in the increasing order of UI layers*/public static final LauncherState SPRING_LOADED = new SpringLoadedState(SPRING_LOADED_STATE_ORDINAL);public static final LauncherState EDIT_MODE = new EditModeState(EDIT_MODE_STATE_ORDINAL);public static final LauncherState ALL_APPS = new AllAppsState(ALL_APPS_STATE_ORDINAL);public static final LauncherState HINT_STATE = new HintState(HINT_STATE_ORDINAL);public static final LauncherState HINT_STATE_TWO_BUTTON = new HintState(HINT_STATE_TWO_BUTTON_ORDINAL, LAUNCHER_STATE_OVERVIEW);public static final LauncherState OVERVIEW = new OverviewState(OVERVIEW_STATE_ORDINAL);public static final LauncherState OVERVIEW_MODAL_TASK = OverviewState.newModalTaskState(OVERVIEW_MODAL_TASK_STATE_ORDINAL);/*** State when user performs a quickswitch gesture from home/workspace to the most recent* app*/public static final LauncherState QUICK_SWITCH_FROM_HOME =OverviewState.newSwitchState(QUICK_SWITCH_STATE_ORDINAL);public static final LauncherState BACKGROUND_APP =OverviewState.newBackgroundState(BACKGROUND_APP_STATE_ORDINAL);public static final LauncherState OVERVIEW_SPLIT_SELECT =OverviewState.newSplitSelectState(OVERVIEW_SPLIT_SELECT_ORDINAL);
NORMAL
(普通狀態 / 主屏幕)- 描述: 這是 Launcher 的默認狀態,顯示用戶的主屏幕 Workspace 和 Hotseat。
- 觸發: 應用啟動時、從其他狀態(如 All Apps、Overview)通過 Home 鍵或 Back 鍵返回時。
NORMAL狀態就是默認的桌面狀態
SPRING_LOADED
(彈簧加載狀態)- 描述: 當用戶長按 Workspace 上的圖標或小部件并開始拖動時進入的狀態。通常用于準備移動項目或卸載應用等操作,界面可能會有輕微的視覺變化(如縮放)。
- 觸發: 在 Workspace 上長按并拖動圖標/小部件。
這個也很好理解
ALL_APPS
(所有應用列表)- 描述: 顯示包含所有已安裝應用圖標的列表或抽屜。
- 觸發: 通常從
NORMAL
狀態向上滑動觸發。
-
HINT_STATE
/HINT_STATE_TWO_BUTTON
(提示狀態)- 描述: 在用戶執行向上滑動進入 All Apps 或 Overview 的手勢過程中,出現的中間過渡狀態。界面元素(如 Workspace、Hotseat)開始移動或變化,可能會顯示一個上滑提示箭頭。
HINT_STATE_TWO_BUTTON
是針對兩鍵導航模式的變體。 - 觸發: 從
NORMAL
狀態開始向上滑動。
- 描述: 在用戶執行向上滑動進入 All Apps 或 Overview 的手勢過程中,出現的中間過渡狀態。界面元素(如 Workspace、Hotseat)開始移動或變化,可能會顯示一個上滑提示箭頭。
-
OVERVIEW
(概覽狀態 / 最近任務)- 描述: 顯示最近使用的應用程序的任務卡片列表(輪播或網格形式),允許用戶切換、關閉或管理任務。這是
OVERVIEW_MODAL_TASK
的基礎狀態。 - 觸發: 完成向上滑動并暫停的手勢、點擊導航欄的“最近任務”按鈕(三鍵導航)。
- 描述: 顯示最近使用的應用程序的任務卡片列表(輪播或網格形式),允許用戶切換、關閉或管理任務。這是
-
OVERVIEW_MODAL_TASK
(概覽模態任務)- 描述: 見上文詳解。突出顯示單個任務卡片的狀態。
- 觸發: 在
OVERVIEW
狀態下與單個任務卡片交互以準備執行特定操作(非啟動)。
-
QUICK_SWITCH
(快速切換狀態)- 描述: 用于在最近使用的兩個或多個應用之間快速切換的狀態,通常伴隨著一個水平滑動手勢或類似 Alt-Tab 的交互。
- 觸發: 在手勢導航下,沿著屏幕底部邊緣快速水平滑動。
-
BACKGROUND_APP
(后臺應用狀態)- 描述: 當用戶從一個正在運行的應用向上滑動,但手勢尚未完成進入
OVERVIEW
狀態時的中間狀態。此時,正在運行的應用窗口通常會縮小并跟隨手指移動,背景可能是模糊的 Launcher 界面。 - 觸發: 從一個應用內部開始執行上滑手勢。
- 描述: 當用戶從一個正在運行的應用向上滑動,但手勢尚未完成進入
其他應用啟動時Launcher就處于BACKGROUND_APP狀態
OVERVIEW_SPLIT_SELECT
(概覽分屏選擇狀態)- 描述: 當用戶在
OVERVIEW
狀態下選擇了一個任務進行分屏后,界面會進入此狀態,等待用戶選擇第二個要分屏的應用。第一個選中的應用通常會停留在屏幕一側的占位符中。 - 觸發: 在
OVERVIEW
狀態下,點擊任務卡片上的“分屏”按鈕或執行相應的分屏手勢。
- 描述: 當用戶在
這些狀態共同構成了 Launcher3 的核心交互模型,通過 StateManager
在這些狀態間進行平滑的動畫過渡,為用戶提供連貫的操作體驗。每個狀態都定義了界面元素的可見性、位置、縮放比例、背景模糊/變暗程度等一系列視覺屬性。