【Android开发】Android中LayoutInflater的使用

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

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

static LayoutInflater from(Context context);

如:

LayoutInflater inflater = LayoutInflater.from(this);
View view=inflater.inflate(R.layout.ID, null);
//或写成:
View view=LayoutInflater.from(this).inflate(R.layout.ID, null);

方法2:由服务获取:

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

方法3:
调用Activity的getLayoutInflater() 函数获取LayoutInflater 对象。

LayoutInflater inflater=this.getLayoutInflater(); 

setContentView和inflate区别

一般用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等)。

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

时间: 2024-10-30 09:02:01

【Android开发】Android中LayoutInflater的使用的相关文章

Android开发之获取LayoutInflater对象的方法总结_Android

本文实例讲述了Android开发之获取LayoutInflater对象的方法.分享给大家供大家参考,具体如下: 在写Android程序时,有时候会编写自定义的View,使用Inflater对象来将布局文件解析成一个View.本文主要目的是总结获取LayoutInflater对象的方法. 1.若能获取context对象,可以有以下几种方法: LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYO

button点击事件-Android开发listView中的Button点击事件被拦截

问题描述 Android开发listView中的Button点击事件被拦截 根据http://blog.csdn.net/boylinux/article/details/8860443 这位大神的帖子,我的代码如下,现在的问题是Listview中的Button和imageview和textview控件点击之后不会响应,而在滑动一下Listview后,之前的点击事件才会响应,导致这个问题的原因不明,但是如果不用HashMap这个MAP的话,就不会有这个问题,请问大神们这是为什么呢?代码如下: p

Android开发之获取LayoutInflater对象的方法总结

本文实例讲述了Android开发之获取LayoutInflater对象的方法.分享给大家供大家参考,具体如下: 在写Android程序时,有时候会编写自定义的View,使用Inflater对象来将布局文件解析成一个View.本文主要目的是总结获取LayoutInflater对象的方法. 1.若能获取context对象,可以有以下几种方法: LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYO

android开发 widget中可以启动service 吗,我在onupdate 启动服务,没反应

问题描述 android开发 widget中可以启动service 吗,我在onupdate 启动服务,没反应 10C @Override public void onUpdate(Context context AppWidgetManager appWidgetManager int[] appWidgetIds) { System.out.println(""545454554""); context.startService(new Intent(conte

OpenGL ES 在 Android 开发库中 - 能不能再牛点儿

OpenGL ES 在 Android 开发库中 - 能不能再牛点儿 太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS.Android.Html5.Arduino.pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作. Android 开发库中突然发现这些个东西,原来和原生的函数名一模一样,而且

imageview-关于android开发ImageView中的图片进行图形标记的添加处理

问题描述 关于android开发ImageView中的图片进行图形标记的添加处理 关于android开发,对ImageView中的图片进行图形标记的添加处理.如果有实例说明请列举一下,谢谢!急!急!急! 解决方案 问题不明白什么意思?可否说清楚点?或者给张图片示意一下. 解决方案二: 是"ImageView右下角有一个小图标,可以对小图标进行操作"的意思吗?

android开发-android中如何对app图标进行点击事件的监听?也就是一键锁屏的效果

问题描述 android中如何对app图标进行点击事件的监听?也就是一键锁屏的效果 如题,android中如何对app图标进行点击事件的监听,也就是类似一键锁屏的功能,一点图片就可以响应 解决方案 本文演示如何在Android中实现程序前后台切换效果. 在介绍程序实现之前,我们先看下Android中Activities和Task的基础知识. 我们都知道,一个Activity 可以启动另一个Activity即使这个Activity是定义在别一个应用程序里的,比如说,想要给用户展示一个地图的信息,现

android开发+-Android开发入门学习中遇到的问题

问题描述 Android开发入门学习中遇到的问题 Android初学者,使用的书籍是<第一行代码Android>在书中2.2.2创建和加载布局中在布局文件中编辑添加了按钮之后,为什么要在活动中加载这个布局,原理是什么? 解决方案 布局文件相当于画面,activity相当于画布,在activity中加载布局文件才会显示出布局文件中的布局 解决方案二: 布局就是传给Activity,在安卓手机界面中显示出来

android 开发-android开发 怎么实现 微信中 右滑删除的效果

问题描述 android开发 怎么实现 微信中 右滑删除的效果 默认是这样 右滑出来一个按钮,有时会有二个按钮,同时左边的布局跟着一起动看起来是一体的 同上,每个Item都有这个效果,是onTouch事件,因该要跟据坐标一重绘布局 如上图中的效果,是微信中的,不知是怎么搞的,因该不是抽屉吧,好像要通过自定义ViewGroup去实现,控制滑动到右边布局的位置,但我没用过ViewGroup不会用纠结好些天了,网上到处找也没找到例子,源码又看不懂,求人给个Demo.

android开发-Android开发中,反向地理编码时,报连接被拒绝的错误

问题描述 Android开发中,反向地理编码时,报连接被拒绝的错误 如题,在将经纬度转成地理位置时,在使用Google API时,连接总是错误,但是在电脑浏览器上却可以. 1. StringBuilder url = new StringBuilder(); url.append("http://maps.google.com/maps/api/geocode/json?latlng="); url.append(latitude).append(","); url