如何在 Android OS 中创造全球底部 sheet

How to go about making a global bottom sheet in Android OS

我正在 iMX8 平台上自定义基于 NXP 的 Android 10 BSP,我正在尝试自定义向上滑动底部 sheet,这对 OS 是全局的,例如status/notifications 向下滑动手势上的栏。

我关注了这个话题 但自定义了向上滑动布局以在 OS 上提供可用的应用程序列表(基本上是应用程序中的启动器)。
虽然此功能在我的应用程序中效果很好,但我实际上希望向上滑动布局是全局的,这样我就可以启动应用程序,无论我当前在哪个 card/application。

由于此功能仅限于我的主应用程序,我将如何着手执行此操作?是否可以将其添加到 SystemUI?

是的,从技术上讲,您可以执行类似于现有 NotificationBar 的操作,您可以从屏幕顶部拖动。在你的情况下,你会从底部开始。

NotificationPanelView 的逻辑在 SystemUI 包中。

但请注意,现有的逻辑有点像意大利面条代码,因此可能需要一段时间才能理解才能添加您自己的面板。


您的另一种选择是将您的面板作为覆盖视图置于所有内容之上(从您的应用程序的后台服务中绘制)。请参阅 this answer 了解一些初步指导。

您首先会显示一个接收所有输入的透明视图。如果检测到手势,则从底部 'move up' sheet,否则将输入传递给下面的应用程序。

注意这个:

  • 这意味着您的服务需要成为前台服务,因此不会被终止。
  • 如果您的应用从“设置”中被终止,BottomSheet 也会消失。
  • 您无法通过“设置”应用显示此内容(有意 Android 限制)

回顾一下:
SystemUI 解决方案从长远来看会更好,限制更少......但最初更难开发。
App overlay 解决方案易于实施,但存在一些可能成为交易破坏者的限制。