3. NavigationBarView核心结构
NavigationBarView 是 SystemUI 中导航栏的视图核心,承载了从系统窗口到具体按键的全部渲染与交互逻辑。理解其布局层级、View 树构成以及核心组件的类图关系,是后续进行功能扩展、事件拦截和性能优化的基础。本章从三个维度层层拆解,并附带可执行的调试与验证手段。
3.1 布局层级总览
NavigationBarView 的布局并非单一 XML,而是由系统窗口、框架容器、布局加载器和具体按键组合而成的四层结构。每一层在 View 树中有明确的 parent-child 关系,职责边界清晰。
| 层级 | 组件 | 职责 | 位置/文件 |
|---|---|---|---|
| 1 | SystemUIService / WindowManager | 创建系统窗口,将导航栏注入窗口层级 | SystemUIService.java |
| 2 | NavigationBarView | 导航栏根容器,管理生命周期与按键分发 | NavigationBarView.java |
| 3 | NavigationBarFrame | 系统窗口内的容器,处理窗口装饰与 insets | navigation_bar_frame.xml |
| 4 | NavigationBarInflaterView | 动态加载按键布局,支持自定义按键注入 | NavigationBarInflaterView.java |
| 5 | Back / Home / Recent | 具体按键视图,处理触摸事件与动画反馈 | nav_button.xml / ButtonDispatcher |
层级原则:每一层只关注一件事。NavigationBarView 不直接创建按键,而是委托 NavigationBarInflaterView 根据配置 inflate 具体按键视图。这种分离使按键定制无需修改核心容器代码。