首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Launcher3 中相关关键类(Android 15 / MTK)

Launcher3 中相关关键类(Android 15 / MTK)

原创
作者头像
用户10171634
发布2025-10-20 09:53:06
发布2025-10-20 09:53:06
1360
举报

非常好,这一段日志已经非常关键了 ✅ 我来帮你逐步分析为什么 Launcher3 的「从下往上拉」(AllApps 动画) 仍然未显示全屏窗口


🧩 一、从日志看问题在哪

你的日志关键线索:

代码语言:javascript
复制
notifyUpdateLayoutParams(TaskbarActivityContext.java:1536)
onTaskbarOrBubblebarWindowHeightOrInsetsChanged(TaskbarInsetsController.kt:186)

再结合你之前的问题(“检查 DragLayer 的 insets”),说明:

你的 Launcher 并没有正确处理 系统 Insets(窗口边距) 的变化。

也就是说:

  • 当进入 AllApps(全应用)界面时;
  • 系统窗口 Insets(状态栏、导航栏高度)没有被更新进 DragLayer;
  • 导致 AllApps 的容器 (AllAppsContainerView) 被限制在可用区域之内,不是全屏显示

🧠 二、为什么「未显示全屏窗口」

这类现象在 Android 12+(尤其是 13~15)常由以下几个问题引起:

原因类型

说明

① Insets 计算不对

Launcher 未调用 setSystemUiVisibility() 或 WindowInsetsController 关闭系统栏适配。

② DragLayer 没有处理 Insets

onApplyWindowInsets() 未传递 Insets 给子视图。

③ 状态栏未隐藏

Launcher 没有调用 getWindow().getDecorView().setSystemUiVisibility() 设置全屏标志。

④ Taskbar 控制器阻挡

Android 12L 之后的 TaskbarActivityContext 动态计算窗口高度时,会限制 Launcher 的可绘制区域。

从你的日志看:

代码语言:javascript
复制
notifyUpdateLayoutParams -> onTaskbarOrBubblebarWindowHeightOrInsetsChanged

就是属于 第④种:Taskbar 限制了可用窗口区域。 TaskbarInsetsController 自动计算出一个“有效高度”,防止 Launcher 内容覆盖系统栏,但它导致 AllApps 没法全屏。


⚙️ 三、Launcher3 中相关关键类(Android 15 / MTK)

类名

作用

QuickstepLauncher.java

主 Activity,管理状态、窗口模式。

InsetsController.java

管理系统 Insets(状态栏、导航栏等)。

TaskbarActivityContext.java

管理桌面底部任务栏窗口,控制可见区域。

DragLayer.java

根布局,负责 Insets 应用。


🔍 四、你要看的具体函数(最相关的)

可以从下面几个函数入手调试:

  1. QuickstepLauncher.java @Override public void onInsetsChanged(Insets insets) { mDragLayer.setInsets(insets); // ✅ 在这里加日志 Log.d("LauncherInsets", "Insets changed: " + insets); }
  2. DragLayer.java @Override public WindowInsets onApplyWindowInsets(WindowInsets insets) { Log.d("DragLayer", "onApplyWindowInsets: " + insets); return super.onApplyWindowInsets(insets); }
  3. TaskbarInsetsController.kt(在 quickstep/taskbar/ 下) fun onTaskbarOrBubblebarWindowHeightOrInsetsChanged() { Log.d("TaskbarInsetsController", "Insets changed, updating layout...") }

这三个地方能看到是否有 Insets 被改小(例如 bottom=120dp)从而压缩了 Launcher 显示高度。


🧩 五、临时验证方案(看是否能全屏)

你可以在 QuickstepLauncher.javaonResume()onStart() 中,添加如下调试代码:

代码语言:javascript
复制
@Override
protected void onResume() {
    super.onResume();

    // 强制全屏模式(隐藏状态栏 + 导航栏)
    getWindow().getDecorView().setSystemUiVisibility(
            View.SYSTEM_UI_FLAG_LAYOUT_STABLE
            | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
            | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
            | View.SYSTEM_UI_FLAG_FULLSCREEN
            | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
            | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
}

如果这样之后「AllApps 可以全屏显示」,说明问题确实是 Insets 没处理好。


✅ 六、推荐的最终修复方向

  • 如果你希望彻底让 AllApps 全屏显示: → 修改 QuickstepLauncher.java → onStateTransitionStart(AllApps) 时设置系统 UI flags 或 InsetsController。
  • 或者: → 在 TaskbarInsetsController.ktupdateInsets() 里,强制返回 Insets.NONE,测试 Launcher 是否恢复全屏。

我可以帮你直接指出 Launcher3 的 onInsetsChanged() 所在函数位置(确切行号), 你方便告诉我 Android 版本(例如 Android 14 还是 15),以及 Launcher3 的具体路径(例如 vendor/mediatek/proprietary/packages/apps/Launcher3/quickstep/src/com/android/launcher3/uioverrides/QuickstepLauncher.java

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 🧩 一、从日志看问题在哪
  • 🧠 二、为什么「未显示全屏窗口」
  • ⚙️ 三、Launcher3 中相关关键类(Android 15 / MTK)
  • 🔍 四、你要看的具体函数(最相关的)
  • 🧩 五、临时验证方案(看是否能全屏)
  • ✅ 六、推荐的最终修复方向
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档