LayoutInflater主要是用于加载布局的,包括Activity中调用setContentView()内部也是通过LayoutInflater方法实现的。获取LayoutInflater常用的基本方法:

LayoutInflater layoutInflater = LayoutInflater.from(context);
LayoutInflater layoutInflater = getLayoutInflater()
LayoutInflater layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

接下来就可以使用layoutInflater.inflate布局了

View inflate(XmlPullParser parser, @Nullable ViewGroup root, boolean attachToRoot)

1.如果root为空,那么attachToRoot将无效
2.如果root不为空,attachToRoot为true,那么view将自动作为子view添加到root布局内。
3.如果root不为空,attachToRoot为false,那么view将应用布局文件中最外层的所有layout属性,说白了就是使最外层的layout_width,layout_height等layout属性生效。
总结一句话:
root为空,最外层的所有layout属性无效,
root不为空,最外层的所有layout属性生效,

下面以一个Button进行说明,最外层设置layout_width,layout_height两个属性。

<?xml version="1.0" encoding="utf-8"?>
<Button xmlns:android="http://schemas.android.com/apk/res/android"android:text="test"android:layout_width="match_parent"android:layout_height="200dp">
</Button>
  • root为空,attachToRoot 为true或者false效果,最外层layout属性无效
//View view = getLayoutInflater().inflate(R.layout.button_layout,null,false);
View view = getLayoutInflater().inflate(R.layout.button_layout,null,true);
mTopLayout.addView(view);

  • root不为空,attachToRoot 为true效果
//因为这里attachToRoot 为true,所以不能再重复addview了
View view = getLayoutInflater().inflate(R.layout.button_layout,mTopLayout,true);

  • root不为空,attachToRoot 为false效果
View view = getLayoutInflater().inflate(R.layout.button_layout,mTopLayout,false);
mTopLayout.addView(view);

结论:View必须存在一个布局中,layout属性才会生效,否则无效。

看到这里,也许有些朋友心中会有一个巨大的疑惑。不对呀!平时在Activity中指定布局文件的时候,最外层的那个布局是可以指定大小的呀,layout_width和layout_height都是有作用的。确实,这主要是因为,在setContentView()方法中,Android会自动在布局文件的最外层再嵌套一个FrameLayout,所以layout_width和layout_height属性才会有效果。那么我们来证实一下吧

protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_owner_draw);mTopLayout = findViewById(R.id.layout_top);ViewParent parent = mTopLayout.getParent();Log.i(TAG, "onCreate: "+parent);}


其实任何一个Activity中显示的界面其实主要都由两部分组成,标题栏和内容布局。标题栏就是在很多界面顶部显示的那部分内容。而内容布局就是一个FrameLayout,这个布局的id叫作content,我们调用setContentView()方法时所传入的布局其实就是放到这个FrameLayout中的,这也是为什么这个方法名叫作setContentView(),而不是叫setView()。

Android LayoutInflater原理分析,带你一步步深入了解View(一)

LayoutInflater原理分析相关推荐

  1. Android LayoutInflater原理分析,带你一步步深入了解View

    Android视图绘制流程完全解析,带你一步步深入了解View(一) 转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/12921889 ...

  2. Android LayoutInflater原理分析,带你一步步深入了解View(一)

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/12921889 有段时间没写博客了,感觉都有些生疏了呢.最近繁忙的工作终于告一段落, ...

  3. Android LayoutInflater原理分析,带你一步步深入了解View(一) 郭霖学习摘要

    2019独角兽企业重金招聘Python工程师标准>>> public class MainActivity extends Activity {//----------------- ...

  4. Android Jetpack组件ViewModel基本使用和原理分析

    本文整体流程:首先要知道什么是 ViewModel,然后演示一个例子,来看看 ViewModel 是怎么使用的,接着提出问题为什么是这样的,最后读源码来解释原因! 1.什么是ViewModel 1.1 ...

  5. java signature 性能_Java常见bean mapper的性能及原理分析

    背景 在分层的代码架构中,层与层之间的对象避免不了要做很多转换.赋值等操作,这些操作重复且繁琐,于是乎催生出很多工具来优雅,高效地完成这个操作,有BeanUtils.BeanCopier.Dozer. ...

  6. Select函数实现原理分析

    转载自 http://blog.chinaunix.net/uid-20643761-id-1594860.html select需要驱动程序的支持,驱动程序实现fops内的poll函数.select ...

  7. spring ioc原理分析

    spring ioc原理分析 spring ioc 的概念 简单工厂方法 spirng ioc实现原理 spring ioc的概念 ioc: 控制反转 将对象的创建由spring管理.比如,我们以前用 ...

  8. 一次 SQL 查询优化原理分析(900W+ 数据,从 17s 到 300ms)

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 来源:Muscleape jianshu.com/p/0768eb ...

  9. 原理分析_变色近视眼镜原理分析

    随着眼镜的发展,眼镜的外型变得越来越好看,并且眼镜的颜色也变得多姿多彩,让佩戴眼镜的你变得越来越时尚.变色近视眼镜就是由此产生的新型眼镜.变色镜可以随着阳光的强弱变换不同的色彩. 变色眼镜的原理分析 ...

  10. jieba分词_从语言模型原理分析如何jieba更细粒度的分词

    jieba分词是作中文分词常用的一种工具,之前也记录过源码及原理学习.但有的时候发现分词的结果并不是自己最想要的.比如分词"重庆邮电大学",使用精确模式+HMM分词结果是[&quo ...

最新文章

  1. 区块链热度不断,那么究竟是泡沫还是未来?
  2. numpy使用[]语法索引二维numpy数组中指定指定行之后所有数据行的数值内容(accessing rows in numpy array after specifc row)
  3. 深入Ajax架构和最佳实践读书笔记
  4. vue el-upload上传组件限制文件类型:accept属性
  5. 使用Microsoft Word2016无法正常对Latex文本转换的踩坑和解决方法
  6. shell执行perl_【编程技巧(一)】在Perl、Shell和Python中传参与输出帮助文档
  7. 开源的关系型数据持久化组件
  8. HBase-再看HBase
  9. git安装和GitHub使用
  10. 1.3 c++程序的构成和书写形式
  11. 如何安装oracle数据库
  12. [debug] you are on Ubuntu or Debian, install libgtk2.0-dev and pkg-config, then re-run cmake ……
  13. 面向对象编程思想以及强、弱引用总结
  14. 洛谷 P2879 [USACO07JAN]区间统计Tallest Cow
  15. 重装电脑xp系统找不到服务器,技术员为你解答XP系统提示“没有启动服务器服务”的修复方案...
  16. CLIENT_PLUGIN_AUTH is required 解决办法
  17. Linux中如何切换中文英文
  18. Android 自动亮度
  19. 为啥人类从1970年1月1日开始计时?
  20. vue订餐app,使用vue-router

热门文章

  1. 桌面图标分类软件Fences的缺点
  2. xrd计算晶面间距_xrd如何计算晶格间距(1)
  3. 中国宽带可调谐飞秒激光器行业市场供需与战略研究报告
  4. 明星也爱字体——赵丽颖秀气字体:(江湖少女两版)蓄势待发
  5. 北大计算机应用基础考研,北大考研辅导班-2021北京大学622计算机应用基础考研经验...
  6. ZEMAX | 如何创建复杂的非序列物体
  7. tftp目录linux目录,tftp命令指定下载目录,2步完成tftp命令传输文件
  8. 【思科、华为、华三这三大认证,选哪个考最好?】
  9. pert计算公式期望值_计划评审技术(PERT)求工期、标准差、方差以及概率
  10. FAT文件系统详解(一)