SystemUI之NavigationBar导航栏
布局结构navigation_bar_window.xml à navigation_bar.xml
[NavigationBarFrame [NavigationBarView [NavigationBarInflaterView ] ] ]
View结构图:
二、代码控制流程
2.1、NavigationBar创建及View添加
StatusBar.java:
start() à createAndAddWindows(result) à makeStatusBarView(result) à createNavigationBar(result) à mNavigationBarController.createNavigationBars(……)
NavigationBarController.java:
createNavigationBars(……) à createNavigationBar(……) à
navBar. createView (……)
NavigationBar.java(Contains logic for a navigation bar view):
备注:导航栏的具体位置在框架DisplayPolicy中根据方向等因素确定:
services\core\java\com\android\server\wm\DisplayPolicy.java
通过上述代码
1、使用navigation_bar_window和navigation_bar填充布局
2、创建NavigationBarFrame并且添加到windowManager中
2.2、导航栏图标加载及事件逻辑
2.2.1、布局文件添加
navigation_bar_window.xml:
NavigationBarFrame,对DeadZone功能下的touch事件做了处理。
navigation_bar.xml:
NavigationBarInflaterView:
1、getDefaultLayout决定导航栏显示哪些控件。
一般情况下是home,recent,back这三个键,如果需要加其他的就在这配置,同时在createView添加对应的布局文件。
2、createView方法创建对应的布局文件,并且添加到导航栏中。
2.2.2、资源文件添加、点击触摸事件
1、NavigationBarView.java(图标资源文件加载)
reloadNavIcons( ) à updateIcons(Configuration.EMPTY) à
2、NavigationBar.java(事件处理)
prepareNavigationBarView()
参考链接:
SystemUI虚拟导航键加载流
SystemUI之NavigationBar