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,就要修改该子串。

    
    space;back,home,recent;space


流程:

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

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

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

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

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

private SparseArray mButtonDispatchers;

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

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

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

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











你可能感兴趣的:(Android)