Android编程之LayoutInflater的inflate方法实例

时间:2022-10-24 11:59:50

假设你不关心其内部实现,仅仅看怎样使用的话,直接看这篇就可以。

接上篇,接下来,就用最最简单的样例来说明一下:

用两个布局文件main 和 test:

当中,main.xml文件为:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" > <TextView
android:layout_width="match_parent"
android:layout_height="50dp"
android:gravity="center"
android:text="hello world" /> </LinearLayout>

test.xml文件为:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="200dp"
android:background="#ffffff00"
android:orientation="vertical" > <TextView
android:layout_width="match_parent"
android:layout_height="50dp"
android:gravity="center"
android:text="test" /> </LinearLayout>

在test中设置了其高度为200dp,而且设置了背景颜色。

接下来看一下LayoutInflater().inflate方法实现:

第一种方式:inflate(view, null)

    @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
View view = (LinearLayout) getLayoutInflater().inflate(R.layout.main,
null); view = getLayoutInflater().inflate(R.layout.test, null); setContentView(view);
}

执行的效果例如以下:

Android编程之LayoutInflater的inflate方法实例

这个就非常easy理解了。由于我没有指定ViewGroup root參数,所以。相当于直接载入了test视图文件。并返回。

而它的高度充满了全屏而不是200dp。由于执行inflate的时候,没有root參数,则无法为test视图设定layoutparam參数。那么为什么会充满屏幕而不是没有显示呢?是由于我们将其设置视图到activity时,会取得当前window的layoutparam赋值给它,也就是充满全屏。

有兴趣的话,你能够改一下test的layout_width设定一个数值,最后执行效果是一样的。

另外一种方式:inflate(view, root, false)

    @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
View view = (LinearLayout) getLayoutInflater().inflate(R.layout.main,
null); view = getLayoutInflater().inflate(R.layout.test, (ViewGroup) view, false); setContentView(view);
}

这里调用inflate的时候。强转了view为viewgroup,由于其本身就是linearlayout,所以这里能够强转。

执行的效果例如以下:

Android编程之LayoutInflater的inflate方法实例

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveHl6X2ZseQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="" height="300" width="180">

单看效果而言,跟上面的一样。

但从代码本身而言,实现的内容就不一样了。

因为有了viewgroup,这里得到的视图事实上已经有了layoutparam。你能够自行打印Log看看。

但为什么最后的结果却是和上面的一样呢。原因还是因为设置视图到activity时,会取得当前window的layoutparam赋值给它,也就是充满全屏。

第三种方式:inflate(view, root, true)

    @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
View view = (LinearLayout) getLayoutInflater().inflate(R.layout.main,
null); view = getLayoutInflater().inflate(R.layout.test, (ViewGroup) view,
true); setContentView(view);
}

执行的效果例如以下:

Android编程之LayoutInflater的inflate方法实例

这个效果就非常明显了,因为main是线性布局,所以,test视图被加入到了textview(hello world)以下,而且保留了其自己的layoutparam參数。

样例非常easy,就不附上代码project。

假设对inflate方法怎样实现的,感兴趣的话,能够參考上一篇文章:

Android编程之LayoutInflater的inflate方法具体解释

补充:新的API会在inflater.inflate(R.layout.xxx, null);提示错误:

Android编程之LayoutInflater的inflate方法实例的更多相关文章

  1. Android编程之LayoutInflater的inflate方法详解

    LayoutInflater的inflate方法,在fragment的onCreateView方法中经常用到: public View onCreateView(LayoutInflater infl ...

  2. Android编程之LayoutInflater的inflate方法具体解释

    LayoutInflater的inflate方法,在fragment的onCreateView方法中经经常使用到: public View onCreateView(LayoutInflater in ...

  3. 带你看懂LayoutInflater中inflate方法

    关于inflate问题,我想很多人多多少少都了解一点,网上也有很多关于这方面介绍的文章,但是枯燥的理论或者翻译让很多小伙伴看完之后还是一脸懵逼,so,我今天想通过三个案例来让小伙伴彻底的搞清楚这个东东 ...

  4. 三个案例带你看懂LayoutInflater中inflate方法两个参数和三个参数的区别

    关于inflate参数问题,我想很多人多多少少都了解一点,网上也有很多关于这方面介绍的文章,但是枯燥的理论或者翻译让很多小伙伴看完之后还是一脸懵逼,so,我今天想通过三个案例来让小伙伴彻底的搞清楚这个 ...

  5. android LayoutInflater和inflate&lpar;&rpar;方法的用法&lpar;转载&rpar;

    原文出处:http://www.cnblogs.com/top5/archive/2012/05/04/2482328.html 在实际开发中LayoutInflater这个类还是非常有用的,它的作用 ...

  6. 【Android 界面效果43】Android LayoutInflater的inflate方法中attachToRoot的作用

    我们在ListView的Adapter的getView方法里面经常会调用两个参数的inflate方法, mInflater.inflate(R.layout.adv_viewpager, null); ...

  7. View&period;inflate和LayoutInflater的inflate方法区别

    平时ListView加载item中,adapter的getView方法中,我们经常用到: LayoutInflater.from(mContext).inflate(R.layout.it ,pare ...

  8. 【转】三个案例带你看懂LayoutInflater中inflate方法两个参数和三个参数的区别

    关于inflate参数问题,我想很多人多多少少都了解一点,网上也有很多关于这方面介绍的文章,但是枯燥的理论或者翻译让很多小伙伴看完之后还是一脸懵逼,so,我今天想通过三个案例来让小伙伴彻底的搞清楚这个 ...

  9. apue编程之getopt &comma;getopt&lowbar;long使用方法以及实例

    1.getopt 1.1 函数定义 int getopt(int argc, char * const argv[], const char *optstring);#include <unis ...

随机推荐

  1. Javascript实践技巧

    最近辞职了,准备北上.期待有个好结果~   本文以<Javascript高级程序设计>为基础,结合自身经验来总结下Javascript实际工作方面的知识.   一.可维护性 1.代码约定 ...

  2. 转:Xms Xmx PermSize MaxPermSize 区别

    Eclipse崩溃,错误提示:MyEclipse has detected that less than 5% of the 64MB of Perm Gen (Non-heap memory) sp ...

  3. Jquery 复习练习(02)Javascript 与jquery 互转 onclick 与click区别

    Javascript 与jquery 互转 jquery 为<script src="jquery-1.8.3.js"></script> 以checkbo ...

  4. Codeforces Round &num;Pi &lpar;Div&period; 2&rpar; D&period; One-Dimensional Battle Ships set乱搞

    D. One-Dimensional Battle ShipsTime Limit: 2 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/con ...

  5. 【网络流24题】No&period;7 试题库问题 (最大流,二分图多重匹配)

    [题意] 假设一个试题库中有 n 道试题. 每道试题都标明了所属类别. 同一道题可能有多个类别属性.现要从题库中抽取 m 道题组成试卷.并要求试卷包含指定类型的试题. 试设计一个满足要求的组卷算法. ...

  6. 使用gson&lpar;一&rpar;

    1.数组和json的转换 package com.test.gson; import com.google.gson.Gson; public class ArrayToJson { public s ...

  7. JS - A&ast;寻路

    算法核心 A*估值算法 寻路估值算法有非常多:常用的有广度优先算法,深度优先算法,哈夫曼树等等,游戏中用的比较多的如:A*估值 算法描述 对起点与终点进行横纵坐标的运算 代码实现 start: 起点坐 ...

  8. AngularJS优缺点、使用场景

    AngularJS 优缺点 优点: AngularJS模板功能强大丰富,自带了极其丰富的angular指令. AngularJS是完全可扩展的,与其他库的兼容效果很好,每一个功能可以修改或更换,以满足 ...

  9. Git reset与checkout的区别

    reset: 将暂存区的文件回撤到工作区,文件内容不会有任何变化 checkout: 将工作区文件恢复到上一次commit时的内容,将会丢失修改了但未加入暂存区的内容

  10. VFS,super&lowbar;block,inode,dentry—结构体图解

    总结: VFS只存在于内存中,它在系统启动时被创建,系统关闭时注销. VFS的作用就是屏蔽各类文件系统的差异,给用户.应用程序.甚至Linux其他管理模块提供统一的接口集合. 管理VFS数据结构的组成 ...