Android LayoutInflater及inflate方法

来源:互联网 发布:七日杀游戏端口被占用 编辑:程序博客网 时间:2024/05/02 13:14

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

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

具体区别:

  1. 对于一个没有被载入或者想要动态载入的界面,都需要使用LayoutInflater.inflate()来载入;
  2. 对于一个已经载入的界面,就可以使用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资源文件中填充一个新的视图层次结构

三个参数:

  1. resource: 布局的资源id
  2. root: 填充的根视图
  3. attachToRoot: 是否将载入的视图绑定到根视图中

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

  1. public View inflate(int resource, ViewGroup root)
  2. public View inflate(int resource, ViewGroup root, boolean attachToRoot)
  3. public View inflate(XmlPullParser parser, ViewGroup root)
  4. public View inflate(XmlPullParser parser, ViewGroup root, boolean attachToRoot)

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

具体例子请参考郭霖大神的博客:Android LayoutInflater原理分析,带你一步步深入了解View(一)


0 0