Android LayoutInflater

LayoutInflater简介

LayoutInflater是一个抽象类,PhoneLayoutInflater继承于它。java

LayoutInflater加载过程

一、经过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

相关文章
相关标签/搜索