LayoutInflater详解以及三种实现方法

910人阅读 评论(0) 收藏 举报
分类:

LayoutInflater的获取与使用

在实际开发中LayoutInflater这个类还是非常有用的,它的作用类似于findViewById()。不同点是LayoutInflater是用来找res/layout/下的xml布局文件,并且实例化;而findViewById()是找xml布局文件下的具体widget控件(如Button、TextView等)。
具体作用:
1、对于一个没有被载入或者想要动态载入的界面,都需要使用LayoutInflater.inflate()来载入;

2、对于一个已经载入的界面,就可以使用Activiyt.findViewById()方法来获得其中的界面元素。


LayoutInflater 是一个抽象类,在文档中如下声明:

public abstract class LayoutInflater extends Object  

 

获得 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()方法,看一下该源代码:

 
复制代码
1 public PhoneWindow(Context context) {  
2 
3         super(context);  
4 
5         mLayoutInflater = LayoutInflater.from(context);  
6 
7 }  
复制代码

 

可以看出它其实是调用 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()。

 

结论:所以这三种方式最终本质是都是调用的Context.getSystemService()。

 

inflate 方法
通过 sdk 的 api 文档,可以知道该方法有以下几种过载形式,返回值均是 View 对象,如下:

 
复制代码
1 public View inflate (int resource, ViewGroup root)  
2 
3 public View inflate (XmlPullParser parser, ViewGroup root)  
4 
5 public View inflate (XmlPullParser parser, ViewGroup root, boolean attachToRoot)  
6 
7 public View inflate (int resource, ViewGroup root, boolean attachToRoot)  
复制代码

 

示意代码:

1 LayoutInflater inflater = (LayoutInflater)getSystemService(LAYOUT_INFLATER_SERVICE);  
2 View view = inflater.inflate(R.layout.custom, (ViewGroup)findViewById(R.id.test));  
3 
4 //EditText editText = (EditText)findViewById(R.id.content);// error  
5 
6 EditText editText = (EditText)view.findViewById(R.id.content);  

 

对于上面代码,指定了第二个参数 ViewGroup root,当然你也可以设置为 null 值。


注意:

·inflate 方法与 findViewById 方法不同;

·inflater 是用来找 res/layout 下的 xml 布局文件,并且实例化;

·findViewById() 是找具体 xml 布局文件中的具体 widget 控件(如:Button、TextView 等)。

查看评论

LayoutInflater.from(this).inflate()参数解析

LayoutInflater.from(this).inflate(layoutId, root, boolean); LayoutInflater.from(this).inflate(layout...
  • fesdgasdgasdg
  • fesdgasdgasdg
  • 2017-06-05 19:09:23
  • 1514

LayoutInflater.from(this) 这个this是什么,加载完后的View 就是谁的。

在一个Activity 里面,如果调用下面的代码: View  view = LayoutInflater.from(this).inflate(R.layout.activity_xxxx, nul...
  • zzp880303
  • zzp880303
  • 2016-06-13 23:31:45
  • 1427

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

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

关于LayoutInflater.from().inflat…

在百度地图上实现添加自定义的view,但是却发现LayoutInflater.from().inflate()不能加载自定义的view,表现在不执行onDraw()方法。 解决办法其实很巧妙,只需要将...
  • zhoujiadick
  • zhoujiadick
  • 2015-11-12 15:54:36
  • 247

关于LayoutInflater.from(context).inflate()的使用的问题

在一般项目中使用adapter时,
  • ccfcccfc
  • ccfcccfc
  • 2014-11-10 18:58:48
  • 14508

Android LayoutInflater深度解析 给你带来全新的认识

转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/38171465 , 本文出自:http://blog.csdn.net/lmj62...
  • lmj623565791
  • lmj623565791
  • 2014-07-28 13:36:51
  • 49787

android中LayoutInflater.from(context).inflate的分析

在应用中自定义一个view,需要获取这个view的布局,需要用到 (LinearLayout) LayoutInflater.from(context).inflate(R.layout.con...
  • zml_2015
  • zml_2015
  • 2015-10-06 16:06:51
  • 5386

使用LayoutInflater的理解

android
  • A189lin
  • A189lin
  • 2016-05-20 19:21:03
  • 2226

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

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

android关于 LayoutInflater.from(context)中参数的问题

LayoutInflater.from(context)中传入context和传入activity效果是不一样的
  • u014165633
  • u014165633
  • 2016-10-25 10:24:21
  • 448
    个人资料
    等级:
    访问量: 3万+
    积分: 472
    排名: 10万+
    文章分类
    文章存档
    最新评论