您的位置:首页 > 移动开发 > Android开发

Android LayoutInflater及inflate方法

2016-04-10 15:50 369 查看
相信大家对LayoutInflate都不陌生,特别在ListView的Adapter的getView方法中基本都会出现,使用inflate方法去加载一个布局,用于ListView的每个Item的布局。

LayoutInflater的作用类似于 findViewById(),不同点是LayoutInflater是用来找layout文件夹下的xml布局文件,并且实例化;而
findViewById()是找具体某一个xml下的具体 widget控件(如:Button,TextView等)。

具体区别:

对于一个没有被载入或者想要动态载入的界面,都需要使用LayoutInflater.inflate()来载入;

对于一个已经载入的界面,就可以使用Activiyt.findViewById()方法来获得其中的界面元素

LayoutInflater 是一个抽象类,在文档中如下声明:

public abstract class LayoutInflater extends Object

一、获得 LayoutInflater 实例的三种方式

方式1. 由LayoutInflater的静态函数 from(Context context) 获取:

static LayoutInflater from(Context context);

LayoutInflater inflater = LayoutInflater.from(this);
View view=inflater.inflate(R.layout.ID, null);


方式2. 由服务获取:

LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
方式3. 调用Activity的getLayoutInflater() 函数获取LayoutInflater 对象:

二、调用inflate()方法

Inflate有三个参数(int resource, ViewGroup root, boolean attachToRoot)

作用:从指定的XML资源文件中填充一个新的视图层次结构

三个参数:

resource: 布局的资源id

root: 填充的根视图

attachToRoot: 是否将载入的视图绑定到根视图中

这个方法重载了四种调用方式,分别为:

public View inflate(int resource, ViewGroup root)

public View inflate(int resource, ViewGroup root, boolean attachToRoot)

public View inflate(XmlPullParser parser, ViewGroup root)

public View inflate(XmlPullParser parser, ViewGroup root, boolean attachToRoot)

这四种使用方式中,我们最常用的是第一种方式,inflate方法的主要作用就是将xml转换成一个View对象,用于动态的创建布局。虽然重载了四个方法,但是这四种方法最终调用的,还是第四种方式。第四种方式也很好理解,内部实现原理就是利用Pull解析器,对Xml文件进行解析,然后返回View对象。

具体例子请参考郭霖大神的博客:Android LayoutInflater原理分析,带你一步步深入了解View(一)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息