如何在Android操作系统中创建全局底部表单?

3
我正在定制一款基于iMX8平台的NXP Android 10 BSP,并尝试创建一个类似于下滑手势的状态/通知栏的全局自定义上滑底部表单。
我遵循了这个帖子,但是定制了上滑布局,使其拥有操作系统中可用应用程序的列表(基本上是应用程序内的启动器)。虽然这个功能在我的应用程序内工作得很好,但我实际上希望这个上滑布局是全局的,这样我就可以在当前所在的任何卡片/应用程序上启动应用程序。
由于此功能仅限于我的主要应用程序,我该如何做到这一点? 是否可以将其添加到SystemUI中?
1个回答

2
是的,从技术上讲,您可以像现有的“通知栏”一样做一些事情,您可以从屏幕顶部拖动它。在您的情况下,您需要从底部开始。 NotificationPanelView 的逻辑位于 SystemUI 包中。
但是,请注意,那里现有的逻辑有点混乱,因此要理解并添加自己的面板可能需要一段时间。
你的另一个选择是将你的面板作为覆盖视图放置在所有内容的顶部(从你的应用程序的后台服务中绘制)。参见这个答案以获取一些最初的指导。
你可以首先显示一个透明视图,该视图接收所有输入。如果检测到手势,你就会从底部“向上移动”该面板,否则你会将输入传递给下面的应用程序。
请注意:
  • 这意味着你的服务需要成为前台服务,这样它就不会被杀死。
  • 如果你的应用程序在设置中被杀死,底部面板也会消失。
  • 你不能在设置应用程序上显示此内容(这是 Android 的有意限制)

简要概述一下:
SystemUI解决方案从长远来看更好,限制较少,但最初开发难度更大。
应用程序叠加解决方案易于实现,但存在几个限制可能成为致命问题。

2
很棒的回答。我同意,最好的方法是与SystemUI一起工作。Rick,你现在在哪个宇宙旅行?此外,值得检查小米AOSP的实现方式,在幕后有一个不错的方案。 - Yurii Tsap
1
仍在C137。 - Rick Sanchez
谢谢,这对我指明了正确的方向,非常有帮助。您如何建议将SystemUI移植到像Android Studio这样的IDE中,以更好地理解这个代码库?我注意到有一些建议去反编译SystemUI.apk,但想知道是否有更好或更容易的方法。 - Tony
1
@RickSanchez,你说现有逻辑代码有点像意大利面条,这一点一点没错。我很困惑如何开始使用Dagger等外部工具与我的自定义面板配合。对于我想要做的事情,这真的必要吗?另外,我注意到像通知面板这样的现有项目的资源ID是由aapt工具生成的。当我从命令行构建时,这个过程是自动处理的吗? - Tony
1
你可以添加外部库,虽然我自己没有在AOSP构建的应用程序中使用过Dagger,但似乎有方法可以实现。ResIDs即使在使用AS/gradle的普通Android应用程序中也是由构建自动生成的,因此在这里也是一样的。 - Rick Sanchez
显示剩余8条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接