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

创建的入口在

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导航栏这个布局加载的时候就会设置图片资源,和长度改变,屏幕旋转都有可能引起重新设置

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值