[原文参考http://lpqsun-126-com.iteye.com/blog/1158070]
Inflater英文意思是膨胀,在android中应该是扩展的意思吧。
LayoutInflater的作用类似于 findViewById(),不同点是LayoutInflater是用来找layout文件夹下的xml布局文件,并且实例化!而 findViewById()是找具体某一个xml下的具体 widget控件(如:Button,TextView等)。
具体作用:
1、对于一个没有被载入或者想要动态载入的界面,都需要使用LayoutInflater.inflate()来载入;
2、对于一个已经载入的界面,就可以使用Activiyt.findViewById()方法来获得其中的界面元素。
获得 LayoutInflater 实例的三种方式:
LayoutInflater inflater = getLayoutInflater(); //调用Activity的getLayoutInflater()
LayoutInflater localinflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
LayoutInflater inflater = LayoutInflater.from(context);
其实,这三种方式本质是相同的,从源码中可以看出:
getLayoutInflater():
Activity 的 getLayoutInflater() 方法是调用 PhoneWindow 的getLayoutInflater()方法,看一下该源代码:
public PhoneWindow(Context context) {
super(context);
mLayoutInflater = LayoutInflater.from(context);
}
可以看出它其实是调用 LayoutInflater.from(context)。
LayoutInflater.from(context):
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;
}
可以看出它其实调用 context.getSystemService()。
inflate 方法
通过 sdk 的 api 文档,可以知道该方法有以下几种过载形式,返回值均是 View 对象,如下:
public View inflate (int resource, ViewGroup root)
public View inflate (XmlPullParser parser, ViewGroup root)
public View inflate (XmlPullParser parser, ViewGroup root, boolean attachToRoot)
public View inflate (int resource, ViewGroup root, boolean attachToRoot)
1:
public View inflate (int resource, ViewGroup root)
reSource:View的layout的ID
root:如果为null,则将此View作为根,此时既可以应用此View中的其他控件了。
如果!null, 则将默认的layout作为View的根。
2:
public View inflate ( XmlPullParser parser, ViewGroup root)
parser:你需要解析xml的解析接口
root:如果null,则将此View作为根,此时既可以应用此View中的其他控件了。
如果!null, 则将默认的layout作为View的根。
3:
public View inflate ( XmlPullParser parser, ViewGroup root, boolean attachToRoot)
parser:你需要解析View的xml的解析接口
root:如果null,则将此View作为根,此时既可以应用此View中的其他控件了。
如果!null, 则将默认的layout作为View的根。
attachToRoot:
ture:也就将此解析的xml作为View根
fase:则为默认的xml,做为根视图View
4:
public View inflate (int resource, ViewGroup root, boolean attachToRoot)
resource:View的layout的ID
root:如果null,则将此View作为根,此时既可以应用此View中的其他控件了。
如果!null, 则将默认的layout作为View的根。
attachToRoot:
ture:也就将此解析的xml作为View根
fase:则为默认的xml,做为根视图View
findViewById
R.layout.xx 是引用res/layout/xx.xml的布局文件(inflate方法),R.id.xx是引用布局文件里面的组件,组件的id是xx...(findViewById方法)。看看R.java配置文件吧,R对文件分类管理,多写几个layout.xml后你会发现,所有的组件id都能用R.id.xx来查看,但是组件不在setContentView()里面的layout中就无法使用,Activity.findViewById()会出现空指针异常 。
他有二中表现形式
1.Activity.findViewById 发现xml定义的ID
2.view.findViewById 视图的子对象
分享到:
相关推荐
最近在使用中就遇到了一些问题,所有下面这篇文章主要给大家总结了关于Android中使用LayoutInflater要注意的一些坑,希望通过这篇能让大家避免走一些弯路,需要的朋友可以参考学习,下面来一起看吧。
主要给大家介绍了关于Android中LayoutInflater.inflater()的正确打开方式,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧
这是老外写的经典Android代码,对学习AsyncTask、JSONAdapter、LayoutInflater很有用
点击按钮动态增加view 学习 LayoutInflater的使用办法.
022 _UI_布局之线性布局-动态生成与LayoutInflater 视频教材,讲解的比较详细,有兴趣的可以学习下哦
本文实例为大家分享了Android下拉刷新的具体代码,供大家参考,具体内容如下 MainActivity.java代码: package siso.refreshablev; import android.app....import android.view.LayoutInflater; import android.
摘要:Java源码,Android源码,任务管理器 Android 源码之taskmanager任务管理器例子,源码由xmobileapp团队提供,源码中注释丰富,学习编写Android 任务管理器的可参考。 实现Android taskmanager过程中的一些实用...
Android学习笔记 对于一个开发者而言,能够胜任系统中任意一个模块的开发是其核心价值的体现。 对于一个架构师而言,掌握各种语言的优势并可以运用到系统中,由此简化系统的开发,是其架构生涯的第一步。 对于一个...
本文实例讲述了Android开发入门之对话框简单用法。分享给大家供大家参考,具体如下: 注:本文只是一个学习笔记 用以记录自己学到哪了 1.获得AlertDialog的静态内部类Builder对象,由此类来创建对话框 2.通过Builder...
下面我们开始学习这一篇的内容 首选上一张图,实现效果: 逻辑解析: 首先上面这个图是最终的实现效果了,有点像我们的通讯录联系人的排版方式,说一下layout的布局吧。很简单,其实就是一个ListView组件。但是这个...
1,觉得小红书的欢迎界面感觉很漂亮,就想来学习学习一下来实现类似于这种效果 。 原效果图如下: 2,根据效果我们来一点点分析 第一步:首先看一下我们的主界面布局文件视图效果如下: main_activity.xml文件...
由于本人刚刚学习Android 对于getViewById和getLayoutInflater().inflate()的方法该如何使用不知如何分别,这里就上网查下资料整理下,大家可以看下。 LayoutInflater 要明白这个问题首先要知道什么是...
通过这篇文章你将学习到以下内容,文末会给出相应的答案 LayoutInflater的inflate 方法的三个参数都代表什么意思? 系统对 merge、include 是如何处理的 merge 标签为什么可以起到优化布局的效果? XML 中的 View 是...
android:descendantFocusability=“blocksDescendants” 防止主控件无法响应点击 android:focusable=“false” 防止子控件,例如按钮无响应 3. 首先,获取需要加载的布局文件order.xml, 这里采用的是LayoutInflater,...
教程: 简书 Tyhoo_Wu RecyclerView 总结教程 andriod RecyclerView 官方教程 需要item.xml、对象类、对象适配器Adapter类、以及此项目...import android.view.LayoutInflater; import android.view.View; import andr
Android Studio 3.6 Canary 11 及更高版本中推出了ViewBinding功能,ViewBinding将逐步替换掉findViewById,还等什么,抓紧时间学习吧! 谷歌官方文档的ViewBinding Demo是用Kotlin语言写的,看起来比较生疏,花了点...
我认为,如果您打算使用列表,或者只是学习如何在Android中使用列表,这将非常有用。如果您想弄乱列表,别名是最重要的帖子。 在本视频中,我将向您展示如何在我们创建的自定义类中使用BaseAdapter类的传统来自定义...