AOSP Android14 Launcher3——Launcher的状态介绍LauncherState类
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
在这些状态间进行平滑的动画过渡,为用户提供连贯的操作体验。每个状态都定义了界面元素的可见性、位置、缩放比例、背景模糊/变暗程度等一系列视觉属性。