原文作者: addcn

原文地址: http://my.eoe.cn/addcn/archive/4215.html

Inflate()作用就是将xml定义的一个布局找出来,但仅仅是找出来而且隐藏的,没有找到的同时并显示功能。而setContentView()将布局设置成当前屏幕即Activity的内容,可以直接显示出来。

SetContentView()一旦调用, layout就会立刻显示UI;而inflate只会把Layout形成一个以view类实现成的对象。有需要时再用setContentView(view)显示出来。

注:Inflate()或可理解为“隐性膨胀”,隐性摆放在view里,inflate()前只是获得控件,但没有大小没有在View里占据空间,inflate()后有一定大小,只是出于隐藏状态。

一般在activity中通过setContentView()将界面显示出来,但是如果在非activity中如何对控件布局设置操作了,这需LayoutInflater动态加载。

 123456789
10
11

<TextViewandroid:id="@+id/tview"android:layout_width="fill_parent"android:layout_height="wrap_content"android:text="ATAAW.COM" /><Buttonandroid:id="@+id/button"android:layout_width="fill_parent"android:layout_height="wrap_content"android:text="按钮" />

在程序中动态加载以上布局。

1
2

LayoutInflater flater = LayoutInflater.from(this);
View view = flater.inflate(R.layout.example, null);

获取布局中的控件。

1
2

button = (Button) view.findViewById(R.id.button);
textView = (TextView)view.findViewById(R.id.tview);

接下来结合源码说说inflate方法的二种形式:

1.通过 LayoutInflater类的inflate()方法动态加载。两种获得LayoutInflater的方法
a. 通过SystemService获得

1

LayoutInflater inflater=(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLEATER_SERVICE);

b. 从给定的context中获取

1

Public static LayoutInflater from(Context context)

c. 两者的区别:实际上是一样的,源码

1
2
3
4
5
6
7
8

public static LayoutInflater from(Context context) {LayoutInflater LayoutInflater =(LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);if (LayoutInflater == null) {throw new AssertionError("LayoutInflater not found.");}return LayoutInflater;
}

d. 实现代码:
第一步,先获得LayoutInflater对象。

1

LayoutInflater inflater=context.getSystemService(Context.LAYOUT_INFLEATER_SERVICE);

第二步,调用inflate()方法加载布局资源。

1

View view=inflater.inflate(int resource, ViewGroup root);

参数1:要加载的xml资源文件,加载出错抛出InflateException异常。
参数2:新生成视图的父层,可设置为NULL。

第三步,将新生成的View加入到需要的View中,我们可以通过findViewById()方法获取当前Acitivty中的视图MyView,然后把新生成的view加入到Myview中。

1

MyView.add(view, new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));

注意:需要指定视图属性。
也可以调用inflater.inflate(int resource, ViewGroup root)方法时直接将视图加入到父视图中。
如:inflater.inflate(R.layout.login,MyView);
这种情况不好控制新视图的长宽。建议使用第一种。

注: LayoutInflater.inflate()将Layout文件转换为View,专门供Layout使用的Inflater。虽然Layout也是 View的子类,但在android中如果想将xml中的Layout转换为View放入.java代码中操作,只能通过Inflater,而不能通过 findViewById()。

第二种方法:使用View的静态方法:

1

static View inflate(Context context, int resource, ViewGroup root)

参数1:Acitivity或Application的上下文
参数2:指定的xml布局文件
参数3:指定父组件。
同样可以通过:

1

View view=View.inflate(this,R.layout.*,null);

生成一个新的View,然后调用Add方法指定View的属性并加入的父组件中。
当然也可以使用View.inflate(this,R.layout.*,MyView)直接加入到父组件中。

findViewById有两种形式 :
R.layout.xx是引用res/layout/xx.xml的布局文件(inflate 方法),R.id.xx是引用布局文件里面的组件,组件的id是xx(findViewById方法)。所有的组件id都能用R.id.xx来查看,但是 组件不在setContentView()里面的layout中就无法使用,Activity.findViewById()会出现空指针异常
a. activity中的findViewById(int id)
b. View 中的findViewById(int id)
6.不同点是LayoutInflater是用来找layout下xml布局文件,并且实例化!而findViewById()是找具体xml下的具体 widget控件(如:Button,TextView等)。

Android上还有一个与Inflate()类似功能的方法叫findViewById(),二者有时均可使用,但也有区别,
区别在于:
findViewById()只能找出当前布局中的组件,即setConentView()的那个layout里的组件.

如果你的Activity里用到别的layout,比如对话框layout,你还要设置这个layout上的其他组件的内容,你就必须用inflate()方法先将对话框的layout找出来,然后再用findViewById()找到它上面的其它组件。例如:

1
2
3

View view1=View.inflate(this,R.layout.dialog_layout,null);
TextViewdialogTV=(TextView)view1.findViewById(R.id.dialog_tv);
dialogTV.setText("abcd");

注:R.id.dialog_tv是在对话框layout上的组件,而这时若直接用this.findViewById(R.id.dialog_tv)肯定会报错。

1

View viewStub = ((ViewStub) findViewById(R.id.stubView)).inflate();

参考:
http://blog.csdn.net/uyu2yiyi/article/details/6324335
http://www.eaier.net/?p=107

转载:
http://blog.sina.com.cn/s/blog_5da93c8f0100xm6n.html

补充
http://blog.csdn.net/jj120522/article/details/7905122

"我简单解释下:当root为null的时候,我们只是把一个xml文件实例化成View对象,反回的就是xml对应的View.而当root不为null的时候,也就是存在parent.那么我们将把这个xml实例化程View对象后,将这个View视图add进其parent中.所以在这里我们用的是LayoutInflater.from(context).inflate(R.layout.item, this);这样其实就是把XML实例化后当作自己的一部分,这样我们在调用此控件的时候,显示的就是我们想要的那个视图了(XML视图).说到这里大家明白了.这样以后用的时候再也不会糊涂了.如果想详细了解那么请参考这篇文章:View视图框架源码分析之一:android是如何创建一个view.讲解的那是的相当的透彻,看懂后对于以后我们开发是百利而无一害啊.(^__^)"

inflate方法的用法相关推荐

  1. inflate简介,LayoutInflater和inflate()方法的用法

    一.inflate简介 inflate这个方法总共有四种形式(见下面),目的都是把xml表述的layout转化为View对象. 其中有一个比较常用,View inflate(int resource, ...

  2. Android中inflate方法的用法

    Inflate()作用就是将xml定义的一个布局找出来,但仅仅是找出来而且隐藏的,没有找到的同时并显示功能.最近做的一个项目就是这一点让我迷茫了好几天. android上还有一个与Inflate()类 ...

  3. Android之Inflate()方法用途

    flate()作用就是将xml定义的一个布局找出来,但仅仅是找出来而且隐藏的,没有找到的同时并显示功能.最近做的一个项目就是这一点让我迷茫了好几天. Android上还有一个与Inflate()类似功 ...

  4. Inflate()---Android之Inflate()方法用途

    Inflate()作用就是将xml定义的一个布局找出来,但仅仅是找出来而且隐藏的,没有找到的同时并显示功能.最近做的一个项目就是这一点让我迷茫了好几天. android上还有一个与Inflate()类 ...

  5. inflate方法两个参数和三个参数的区别

    前言 今天在lint项目的代码时,又遇到了inflate方法的参数问题,之前看过相关的文章,又没有记录下来,导致时间长了就忘记了.今天再次遇到这个问题,便老老实实记录一下LayouInflater中i ...

  6. LayoutInflater中inflate()方法的学习使用

    LayoutInflater中inflate()方法的学习使用 一.LayoutInflater ​ LayoutInflater实例化一个xml布局加到对应的View对象中.该对象不直接使用.调用g ...

  7. 直接法 matlab,解线性方程组直接方法matlab用法.doc

    解线性方程组直接方法matlab用法 在这章中我们要学习线性方程组的直接法,特别是适合用数学软件在计算机上求解的方法. 2.1 方程组的逆矩阵解法及其MATLAB程序 2.1.3 线性方程组有解的判定 ...

  8. PHP中魔术方法的用法

    PHP中魔术方法的用法 /** PHP把所有以__(两个下划线)开头的类方法当成魔术方法.所以你定义自己的类方法时,不要以 __为前缀. * */// __toString.__set.__get__ ...

  9. 带你看懂LayoutInflater中inflate方法

    关于inflate问题,我想很多人多多少少都了解一点,网上也有很多关于这方面介绍的文章,但是枯燥的理论或者翻译让很多小伙伴看完之后还是一脸懵逼,so,我今天想通过三个案例来让小伙伴彻底的搞清楚这个东东 ...

  10. android studio 如何提示方法的用法

    方法/步骤1在 Eclipse中鼠标放上去就可以提示方法的用法,实际上Android Studio也可以设置的.如图 Preferences > Editor >Generan> S ...

最新文章

  1. 37岁程序员被裁,120天没找到工作,无奈去小公司,结果懵了...
  2. OUYA游戏开发快速入门教程
  3. 模式识别新研究:微软OCR两层优化提升自然场景下的文字识别精度
  4. 参数 相等_ANSYS DesignXplorer 参数化优化在水冷板流道设计中的应用
  5. Spread Studio for .NET 7: 使用现有数据填充单元格
  6. u-boot Makefile完全解读
  7. C语言变长数组 struct中char data[0]的用法
  8. Web 版 VS Code (Visual Studio Online) 即将来临!
  9. 如何脱离SDK,使用DW5.5和phonegap以及JQMobile搭建开发环境
  10. 今天的我叫史努比的飞鸽传书
  11. “反应快”的程序猿更优秀吗?
  12. [Ruby on Rails系列]3、初试Rails:使用Rails开发第一个Web程序
  13. 手写哈希(实现简单的加数、查询)
  14. Oracle Sys和system用户区别
  15. 竟还有这样的代码注释我笑喷了
  16. Oracle约束的使用
  17. html点击图片局部放大,鼠标单击实现放大镜图片局部放大效果
  18. 树莓派搭建transmission下载机
  19. 大学综评自招面试 计算机专业,自主招生中的综合评价面试技巧
  20. python多久可以入门_python自学要多久能学会

热门文章

  1. 从零学习Belief Propagation算法(三)
  2. websocket+kafka+springcloud+springboot实现报文(json)传输,解析,推送
  3. pca降维算法java_PCA降维算法
  4. windows下安装openssl工具及生成pfx文件
  5. python实现排序的lowB三人组:冒泡、插入、选择
  6. Hybrid App开发 四大主流平台
  7. 【BZOJ5109】【CodePlus2017】大吉大利,晚上吃鸡!
  8. 电影级视频剪辑PR调色/FCP调色/达芬奇调色预设LUTs
  9. 宁德时代钠电池雷声大,雨点小?
  10. 数亿人热血狂欢!EDG含泪加冕,我们是冠军!