当前位置: 代码迷 >> 综合 >> Android Q sprd SystemUI (3) 导航键加载
  详细解决方案

Android Q sprd SystemUI (3) 导航键加载

热度:70   发布时间:2024-02-26 23:52:00.0

创建的入口在

frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/Statusbar.java

frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/NavigationBarController.java

Statusbar的makeStatusBarView函数中调用createNavigationBar函数最后调用到NavigationBarController的createNavigationBars

frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarFragment.java

看 NavigationBarFragment 的create方法,是WindowManager去addView了导航栏的布局,最终add了fragment的onCreateView加载的布局navigation_bar.xml,xml中是自定义布局继续跟代码frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarInflaterView.java

看onFinishInflate()方法,这是view的生命周期,每个view被inflate之后都会回调。看inflateLayout():里面的newLayout参数很重要!!!根据上一个方法看到getDefaultLayout(),他return了一个在xml写死的字符串。再看inflateLayout方法,他解析分割了xml里配置的config_navBarLayout字符串,并传给了inflateButtons方法.看inflateButtons()方法,遍历加载inflateButton.调到createView()方法,通过字符串匹配布局,以home按键为例,加载了home的button,其实是加载了 R.layout.home 的layout布局

frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyButtonView.java

KeyButtonView通过sendEvent()方法,back等view的点击touch事件交由系统以实体按键(keycode)的形式处理的.当然KeyButtonView类还处理了支持长按的button,按键的响声等.

导航键的图标由NavigationBarFragment的onConfigurationChanged()方法 和 NavigationBarView的onAttachedToWindow()和onSizeChanged()方法更新。在NavigationBarView导航栏这个布局加载的时候就会设置图片资源,和长度改变,屏幕旋转都有可能引起重新设置

  相关解决方案