1) StatusBar.start ->createAndAddWindows()->addStatusBarWindow()->makeStatusBarView()->
2) makeStatusBarView()->createNavigationBar()->NavigationBarFragment.create()->
3) create(Context context, FragmentListener listener)->
View navigationBarView = LayoutInflater.from(context).inflate(R.layout.navigation_bar_window, null);->
FragmentHostManager fragmentHost = FragmentHostManager.get(navigationBarView);
NavigationBarFragment fragment = new NavigationBarFragment();
fragmentHost.getFragmentManager().beginTransaction().replace(R.id.navigation_bar_frame, fragment, TAG).commit(); ->
onCreate()->onCreateView()->
inflater.inflate(R.layout.navigation_bar, container, false);
4)由navigation_bar.xml可知查看自定义View
NavigationBarView.java
NavigationBarInflaterView.java
4.1)NavigationBarView.java
NavigationBarView(Context context, AttributeSet attrs)->
onFinishInflate()->
reloadNavIcons->
updateIcons()->
updateIcons()加载对应图标->
4.2)NavigationBarInflaterView.java
根据自定义view的调用顺序:
createInflaters()->onFinishInflate()->inflateChildren()->inflateLayout(String newLayout)->
4.2.1)inflateLayout(String newLayout)
inflateLayout(String newLayout)->getDefaultLayout()->mContext.getString(R.string.config_navBarLayout);获得对应菜单->
inflateLayout()->
inflateButtons(start, mHorizontal.findViewById(R.id.ends_group),false /* landscape */, true /* start */);->
inflateButton(buttons[i], parent, landscape, start);->
View v = createView(buttonSpec, parent, inflater);根据buttonSpec来确定加载对应的布局->
5)KeyButtonView.java
onTouchEvent()->
sendEvent(KeyEvent....)->