`

Android 学习之 LayoutInflater

阅读更多
[原文参考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 的使用

    通过学习这个项目,开发者可以更深入地理解`LayoutInflater`的工作原理和用法。 总的来说,`LayoutInflater`是Android开发中不可或缺的一部分,它使得我们可以用XML定义界面,提高了代码的可读性和维护性,同时也...

    Android LayoutInflater的用法

    通过深入学习`LayoutInflater`的源码,开发者可以更好地理解和定制其行为,以满足特定的应用需求。如果你希望了解更多关于`LayoutInflater`的细节,建议阅读博客文章(链接已给出),该文章可能会涵盖更多实用示例和...

    LayoutInflater inflate 示例demo

    总的来说,这个"LayoutInflater inflate 示例demo"是一个很好的学习资源,它将帮助你深入理解Android中布局动态加载的过程,以及如何根据需要有效地使用`LayoutInflater`。通过实践,你将能够熟练掌握这一关键的...

    Android学习之Android 5.0分享动画实现微信点击全屏效果

    在Android开发中,实现丰富的用户交互和视觉效果是提升应用体验的关键之一。本文将深入探讨如何在Android 5.0及以上版本中实现类似微信的点击分享动画,即当用户点击分享按钮时,整个屏幕会充满动画效果。我们将通过...

    Android项目教材学习指导文档

    以下是对给定的"Android项目教材学习指导文档"中两个核心文件的详细解读: 1. **Android源码设计模式解析与实战.pdf** 这本书籍着重于Android系统源码中的设计模式理解和实战应用。设计模式是软件工程中的一种最佳...

    Android学习之Toast的自定义_标题栏的隐藏

    ### Android学习之Toast的自定义与标题栏的隐藏 #### 一、Toast简介 Toast是Android平台提供的一个轻量级消息提示组件,主要用于向用户展示短时的信息提示。它不会阻塞用户当前的操作,通常会自动消失。在实际开发...

    Android学习必备材料

    《Android学习全方位指南》 Android,作为全球最大的智能手机操作系统,为开发者提供了丰富的平台来创造创新的应用。本资源针对初学者,全面涵盖了Android开发的核心概念,是Android学习的绝佳起点。通过对压缩包中...

    android学习资料 开发资料

    这个"android学习资料 开发资料"压缩包很可能是为你提供一系列关于Android应用开发的学习资源,包括文章、教程、代码示例等,帮助你深入理解Android平台的工作原理并提升开发能力。让我们根据标题、描述和标签来详细...

    第一行代码Android学习练习代码5

    《第一行代码Android学习练习代码5》是针对Android开发初学者的一个实践项目,它主要涵盖了Android应用开发中的基本概念和核心组件。在这个项目中,我们可以深入理解并掌握Android中的Fragment和Activity的使用,...

    老罗Android之旅-授课PPT

    总之,《老罗Android之旅》PPT课件是全面学习Android开发的一份宝贵资料,无论你是初学者还是有一定经验的开发者,都能从中受益匪浅。通过深入学习和实践,你将能够熟练掌握Android开发技能,为自己的职业生涯开启新...

    android-blink:演示 LayoutInflater 复活节彩蛋的小型 Android 项目

    通过阅读代码,你可以学习到如何使用LayoutInflater来动态加载布局,如何结合Java代码实现交互逻辑,以及如何在Android应用中创建和隐藏视图。这不仅有助于理解LayoutInflater的工作机制,还能提升你在Android开发中...

    android学习

    总的来说,Android学习涵盖了从系统架构到应用开发的多个方面,通过掌握这些基础知识,开发者可以逐步构建出功能丰富的移动应用。对于初学者,建议先从搭建环境、理解生命周期和布局开始,然后逐渐深入到数据传递和...

    android学习之碎片的生命周期例子

    通过这样的学习和实践,开发者可以更好地理解和管理Fragment的生命周期,从而创建更健壮、用户体验更佳的Android应用程序。记住,理解并熟练掌握Fragment的生命周期对于构建复杂的多屏幕应用至关重要。

    android之Fragment学习dome

    以上是关于"android之Fragment学习dome"的一些主要知识点。通过理解并熟练运用这些概念,开发者能够更好地构建适应不同屏幕尺寸和复杂度的Android应用程序。在实际开发中,结合具体案例实践,对Fragment的掌握会更加...

    LayoutInflater inflate例子

    在Android开发中,`LayoutInflater` 是一个至关重要的组件,它负责将XML布局文件转换为视图对象并添加到视图...在给定的`MyTeach` 文件中,可能包含了一些教学资源,可以帮助进一步学习和实践`LayoutInflater` 的使用。

    android学习——GridView

    convertView = LayoutInflater.from(getContext()).inflate(R.layout.custom_grid_item, parent, false); } ImageView imageView = convertView.findViewById(R.id.image); TextView textView = convertView....

    Android学习之瀑布流效果

    在Android中,实现瀑布流布局有多种方法,其中最常用的是使用第三方库如`StaggeredGridLayoutManager`,这是Android官方支持的布局管理器之一,适用于`RecyclerView`。下面我们将详细探讨如何使用`...

    dynamicLayout_android源码_

    Android系统提供了一些机制来实现这种灵活性,其中包括使用LayoutInflater、ViewStub、Fragment以及自定义ViewGroup等。下面将详细讨论这些知识点。 1. **LayoutInflater**: Android中的LayoutInflater是用于实例化...

    AsyncTask、JSONAdapter、LayoutInflater的实例

    在Android应用开发中,AsyncTask、JSONAdapter和LayoutInflater是三个非常关键的概念,它们分别用于处理后台任务、数据解析和UI布局的动态加载。下面将详细解释这三个组件,并结合实际应用场景来帮助你理解它们的...

    Android Tablayout 自定义Tab布局的使用案例

    Android Tablayout 自定义Tab布局的使用案例 Android Tablayout 是 Android 设计库中的一部分,主要用于实现标签页功能...通过本文,我们可以了解到 Android Tablayout 的使用方法,并学习如何实现自定义的 Tab 布局。

Global site tag (gtag.js) - Google Analytics