Android中LayoutInflater的使用

转载 2015年07月07日 11:09:29

转自:http://erbo2008.iteye.com/blog/1542733

Inflater英文意思是膨胀,在Android中应该是扩展的意思吧。 
LayoutInflater的作用类似于 findViewById(),不同点是LayoutInflater是用来找layout文件夹下的xml布局文件,并且实例化!而 findViewById()是找具体某一个xml下的具体 widget控件(如:Button,TextView等)。

获取它的用法有3种:

方法1:

由LayoutInflater的静态函数:from(Context context) 获取:

static LayoutInflater from(Context context);

如:

 

Java代码 复制代码 收藏代码
  1. LayoutInflater inflater = LayoutInflater.from(this);
  2. View view=inflater.inflate(R.layout.ID, null);
  3. //或写成:
  4. View view=LayoutInflater.from(this).inflate(R.layout.ID, null);
Java代码  收藏代码
  1. LayoutInflater inflater = LayoutInflater.from(this);      
  2.   
  3. View view=inflater.inflate(R.layout.ID, null);       
  4.   
  5. //或写成:       
  6.   
  7. View view=LayoutInflater.from(this).inflate(R.layout.ID, null);     

方法2:

由服务获取:

 

Java代码 复制代码 收藏代码
  1. LayoutInflater inflater = (LayoutInflater)context.getSystemService
  2. (Context.LAYOUT_INFLATER_SERVICE);
Java代码  收藏代码
  1. LayoutInflater inflater = (LayoutInflater)context.getSystemService       
  2.  (Context.LAYOUT_INFLATER_SERVICE);  
  3.    

方法3:

调用Activity的getLayoutInflater() 函数获取LayoutInflater 对象。

 

setContentView和inflate区别

转:http://blog.163.com/promise_wg/blog/static/18912001420116241062211/

一般用LayoutInflater做一件事:inflate

inflate这个方法总共有四种形式(见下面),目的都是把xml表述的layout转化为View对象
其中有一个比较常用,View inflate(int resource, ViewGroup root),另三个,其实目的和这个差不多。
int resource,也就是resource/layout文件在R文件中对应的ID,这个必须指定。
而ViewGroup root则可以是null,null时就只创建一个resource对应的View,不是null时,会将创建的view自动加为root的child。

setContentView()一旦调用, layout就会立刻显示UI;而inflate只会把Layout形成一个以view类实现成的对象,有需要时再用setContentView(view)显示出来
一般在activity中通过setContentView()将界面显示出来,但是如果在非activity中如何对控件布局设置操作了,这需LayoutInflater动态加载
< TextView
android:id="@+id/tview"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="ATAAW.COM"
/>
< Button
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/button"
android:text="按钮"
/>
在程序中动态加载以上布局。
LayoutInflater flater = LayoutInflater.from(this);
View view = flater.inflate(R.layout.example, null);
获取布局中的控件。
button = (Button) view.findViewById(R.id.button);//这里的view为上面获取的view对象
textView = (TextView)view.findViewById(R.id.tview);

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

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) 
不同点是LayoutInflater是用来找layout下xml布局文件,并且实例化!而findViewById()是找具体xml下的具体 widget控件(如:Button,TextView等)。

android 自定义View 三 ---- LayoutInflater

说到自定义view就不得提到LayoutInflater,虽然我们在代码中可以直接用new方法构造出各种View,然后再添加各种属性去控制View的大小和位置等布局,但是这是很复杂繁琐的,细节优化更麻...
  • Jo__yang
  • Jo__yang
  • 2016年09月05日 17:56
  • 963

学习Android遇到的问题——LayoutInflater

前言对于像我这样的android初学者来说,LayoutInflater是个很模糊的概念,I can’t feel it!我只知道在自定义控件的时候构造函数中会用到LayoutInflater.fro...
  • small_bo
  • small_bo
  • 2015年11月24日 18:12
  • 429

Fragment中加载问题以及LayoutInflater加载

Fragment的运用中的自己的理解 Fragment的加载是在某一个控件上面,运用FragmentManager() FragmentManager.beginTransacti...
  • qq_35908137
  • qq_35908137
  • 2017年02月16日 16:55
  • 336

LayoutInflater的正确用法

Layout inflation是在android系统中使用的术语,当XML布局资源被解析并转换成View对象时会用到。 在Android SDK中,LayoutInflater是经常使用到的,但你...
  • u010429311
  • u010429311
  • 2016年04月03日 16:46
  • 1584

layoutInflater动态加载布局

activity_main.xml
  • u013210620
  • u013210620
  • 2015年12月18日 21:14
  • 1260

Android自定义UI陷阱:LayoutInflater.from().inflate()一定不能工作在父类或虚类里

问题背景:有一些UI具有共性,比如常见的app第一次运行时出现的各种指示框,告诉你往哪搓是调音量的,往哪点是调屏幕亮度的,当点击这些VIew,则其自动消失。或者一动时间后,自动消失。另外一个问题是,不...
  • yanzi1225627
  • yanzi1225627
  • 2014年07月06日 16:04
  • 24811

Android应用setContentView与LayoutInflater加载解析机制源码分析

【工匠若水 http://blog.csdn.net/yanbober 转载烦请注明出处,尊重分享成果】1 背景其实之所以要说这个话题有几个原因: 理解xml等控件是咋被显示的原理,通常大家写代码都...
  • yanbober
  • yanbober
  • 2015年05月26日 23:16
  • 40179

[Android] Fragment 中使用 getLayoutInflater() 的问题

问题:我想在一个Fragment的ListView中显示我的搜索结果 但在这里报错:LayoutInflater inflater = getLayoutInflater();“The method...
  • yuxin1100
  • yuxin1100
  • 2016年06月06日 20:47
  • 3897

Android 源码系列之<四>从源码的角度深入理解LayoutInflater.Factory之主题切换(上)

现在越来越多的APP都加入了换肤功能或者是日间模式和夜间模式等,这些功能不仅增加了用户体验也增强了用户好感,众所周知QQ和网易新闻的APP做的用户体验都非常好,它们都有日间模式和夜间模式的主题切换。实...
  • llew2011
  • llew2011
  • 2016年05月04日 18:16
  • 6886

Android开发——深入理解LayoutInflater

LayoutInflater类可以从XML文件中实例化View对象,其中涉及到XML解析,使用的是PULL解析;从标签实例化View,使用的是反射。 如何获取LayoutInflater?为了获取L...
  • qq_19431333
  • qq_19431333
  • 2016年11月01日 10:28
  • 957
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android中LayoutInflater的使用
举报原因:
原因补充:

(最多只允许输入30个字)