前言
在系统应用开发过程中,常常遇到一些特殊的需求,Android原生的应用并无此适配,此时需要对系统应用进行定制化开发。
目前遇到的这样一个需求:下拉通知菜单栏时,定时8秒后自动关闭通知菜单栏。通知菜单栏为SytstemUI中的一个特殊窗口,原车系统不支持自动关闭。
开发
- 下拉菜单自动隐藏逻辑
在原生NotificationPanelView
类中,增加了下拉菜单展开回调:
以及下拉菜单收起回调:
同时增加触摸回调,触摸时再次更新延时退出:
StatusBar类注册监听处理收起逻辑:
- 下拉菜单与系统弹框的互斥逻辑
PanelBar
类的触摸事件onTouchEvent()
回调中,通过发送系统CLOSE_SYSTEM_DIALOGS
广播通知其他应用隐藏显示的弹框。 - 自定义界面加载
在StatusBar
类中createAndAddWindows()
初始化自定义的systemui view的状态栏和下拉菜单控制器,createNavigationBar()
初始化导航栏的控制器。
WindowHelper
承载着systemui view的初始化操作以及与原生SystemUI的交互操作,setPanelControl()
为控制下拉菜单展开收起的方法,其中外部可通过此方法来控制下拉菜单展开和收起,例如语音和方控控制展开和收起。
总结
通过对原车SystemUI的定制化开发,扩展不同需求,从而不影响原车SystemUI功能,定时自动隐藏下拉通知菜单栏开发难度不到,需要修改的地方也不是很多,可以稳定兼容原车SystemUI。