LayoutInflater是一个抽象类,PhoneLayoutInflater继承于它。java
一、经过getSystemServive()或LayoutInflater.from()获取一个LayoutInflater实例(实际获取的是PhoneLayoutInflater实例)。android
二、layoutInflater.inflater()中解析xml的过程就是分析XML节点,主要由requestFocus、merge、include和普通节点(每种节点都有本身的处理方法)。在PhoneLayoutInflater中有一个数组,是一些package name的前缀,有web
private static final String[] sClassPrefixList = { "android.widget.", "android.webkit.", "android.app." };三、onCreateView方法经过解析到的Node Name和前缀拼接,若是能找到该类则建立一个实例并添加到建立的View中。数组
四、LayoutInflater.inflater(int layoutResID, ViewGroup root, bool attachToRoot)经过解析layout xml获得view,根据attachToRoot决定是否将获得的View添加到root中。app
PS:若是root为null,默认不添加到root中。spa
场景1:code
Activity的setContentView(int layoutID)。若是Activity继承了FragmentActivity或Activity,最终会调用PhoneWindow中的setContentView()。setContentView(View view)会调用layoutInflater.inflater()解析出界面并经过addView(view)到父view中。xml
场景2:继承
ListView Adapter中的getItem,利用layoutInflater.inflate()直接获取界面。这里的rootView赋值为null。get