android N Navigationbar加载流程分析

Android N相比较于Android M有了很大的变化,下面记录一下Android N上Navigationbar的分析。

        android N上Navigationbar主要的布局文件就是navigationbar_layout.xml和navigationbar_layout_rot90.xml,两个文件就是横竖屏时调用不同的布局文件,但是显示的内容都是一样,写法略有区别,如果是要在Navigationbar上添加View的话,记得至少要修改这两个布局文件,否则会导致横竖屏时,一侧有View,一侧没有引发的NullPointerException(下文中都以navigationbar_layout.xml为例)。

       android N上,NavigationBar的按钮区域被划分成了两个个区域--center_group,end_group;back,home,recents三个按键在center_group中,end_group放的是键盘提示等icon。

       显示几个按键是有config_navBarLayout这个子串控制的,如果需要添加额外的显示icon,就要修改该子串。

    <!-- Nav bar button default ordering/layout -->
    <string name="config_navBarLayout" translatable="false">space;back,home,recent;space</string>


流程:

1.NavigationBarInflaterView.inflateLayout(....)开始获取要显示icon对应的子串,通过getDefaultLayout()方法拿到对应的子串。

2.拿到的子串会进行处理,根据关键字分成三个子串。

3.inflateButtons(....),通过inflateButtons(....)方法把对应的字串和要显示在的区域布局绑定在一起。

4.inflateButton()是就开始遍历字串,对于已经定义的字串,调用不同的布局文件(在android N上,每一个按钮都有一个独立的布局文件,如果想要添加新的按钮,一定要添加新的布局文件以供引用加载),加载在布局中。

4.addToDispatchers(...) 把按钮都记录在一个数组中,这个数组再后面会用到。

private SparseArray<ButtonDispatcher> mButtonDispatchers;

5.NavigationBarView.NavigationBarView(...) 记录btn的ID和对应的控件。

mButtonDisatchers.put(R.id.back, new ButtonDispatcher(R.id.back));

6.setDisabledFlags(..)控制icon的隐藏和显示

7.PhoneStatusBar.prepareNavigationBarView()中给按钮绑定点击和长按的事件。










Android navigationbar 是指在 Android 系统中的导航栏。导航栏通常位于屏幕底部,用于提供用户导航和操作功能。它包含了一些常见的导航按钮,如返回、主页、多任务切换等。Android navigationbar 可以自定义其外观和行为,以适应不同设备和系统版本的需求。通过修改 NavigationBarFragment 的布局文件,可以对导航栏进行定制和扩展。 这样的导航栏在 Android SystemUI 中起着重要的作用,它提供了用户与系统交互的入口,并提供了快速访问常用功能和应用的方式。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [Android SystemUINavigationBar,导航栏(四)](https://blog.csdn.net/Bill_xiao/article/details/108517403)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [Android NavigationBar问题处理的方法](https://download.csdn.net/download/weixin_38608379/12770828)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值