基于Android 4.2.2做的分析
parser里封装了layout的dom对象,从中可以获取各节点参数
root为layout对应根节点的父节点,其作用见上述文档解释,需要注意一点的是,root的作用主要有两个:
1.根据root的类型(RelativeLayout/LinearLayout),结合layout配置的attrs创建layoutParams,
如root为RelativeLayout时,layout中设置toleftof,则创建的RelativeLayout.LayoutParams中会保存该属性。
2.为layout的viewgroup设置该layoutParams
对于layout的子节点,采用递归函数设置
这里主要分析下params = root.generateLayoutParams(attrs);和temp.setLayoutParams(params);
假定root类型为RelativeLayout,则generateLayoutParams会调用如下:
其父类为ViewGroup.MarginLayoutParams,其构造函数如下:
可以看到父类中会根据attrs设置layoutParams对象中的基本属性:宽高、margin
而子类中则负责relativelayout特有的属性设置,如below/toleftof/above/alignXXX属性:
若layout文件中顶级节点如下,而其root为RelativeLayout,则上述操作便是设置红框内的属性,而setLayoutParams的作用为使其生效。
 
该函数的作用描述如下:
这里的mParent就是root
综上若attach=false时,root的作用就是为使得layout的layout_params生效,建议在onCreate/onCreateView/onCreateContentView中inflate使用root参数,避免布局失效。
比如layout中设置顶级节点android:layout_height="184dp",但若inflate时root=null,则实际显示时layout_xxx不生效
 
Ref:
http://blog.csdn.net/xyz_fly/article/details/37932989
 
 
 
 
 

LayoutInflater.inflate源码分析的更多相关文章

  1. Android LayoutInflater.inflate源码解析

    一年多以前看过源码,感觉了解比较透彻了,长时间不经大脑思考,靠曾经总结的经验使用inflate方法,突然发现不知道什么时候忘记其中的原理了,上网查了一些资料,还各有不同,反而把我搞糊涂了,还是自己看源 ...

  2. Android应用层View绘制流程与源码分析

    1  背景 还记得前面<Android应用setContentView与LayoutInflater加载解析机制源码分析>这篇文章吗?我们有分析到Activity中界面加载显示的基本流程原 ...

  3. Android LayoutInflater&LayoutInflaterCompat源码解析

    本文分析版本: Android API 23,v4基于 23.2.1 1 简介 实例化布局的XML文件成相应的View对象.它不能被直接使用,应该使用getLayoutInflater()或getSy ...

  4. Android base-adapter-helper 源码分析与扩展

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/44014941,本文出自:[张鸿洋的博客] 本篇博客是我加入Android 开源项 ...

  5. 布局优化之ViewStub源码分析

    源码分析 @RemoteView public final class ViewStub extends View { private int mInflatedId; private int mLa ...

  6. Android8.1 MTK平台 SystemUI源码分析之 网络信号栏显示刷新

    SystemUI系列文章 Android8.1 MTK平台 SystemUI源码分析之 Notification流程 Android8.1 MTK平台 SystemUI源码分析之 电池时钟刷新 And ...

  7. Android8.1 SystemUI源码分析之 Notification流程

    代码流程 1.先看UI显示,StatuBar加载 CollapsedStatusBarFragment 替换 status_bar_container(状态栏通知显示区域) SystemUI\src\ ...

  8. Android源码分析(十)-----关机菜单中如何添加飞行模式选项

    一:关机菜单添加飞行模式选项 源码路径:frameworks/base/core/res/res/values/config.xml 增加<item>airplane</item&g ...

  9. duilib之源码分析

    <duilib之源码分析>1 stdAfx.h * lengthof(x) 计算数组长度宏 * MAX  两值最大 * MIN  两值最小 * CLAMP(x,a,b) x在a,b之间则取 ...

随机推荐

  1. 2018.09.28 bzoj3743: [Coci2015]Kamp(树形dp)

    传送门 这是一道很有意思的题. 我们把所有的关键点都提出来,当成一棵有边权的虚树. 然后发现虚树上除最后不回到虚根的那条路径外外每条边都会被走两遍. 显然要让答案最优,不走的路径应该在虚树的直径上,于 ...

  2. 2018.09.23 关键网线(tarjan)

    描述 给出一个无向连通图,即在任一个点对间存在路径.有的点提供服务a, 有的点提供服务b .同一个点可能有两种服务类型.每个点必须与提供2种服务的点连通.如果一个边断掉,就可能出现有些点不能被服务到, ...

  3. arduino 串口数据啊按字节分析

    #include <avr/wdt.h> #include <SoftwareSerial.h> #include <EEPROM.h> #define FPIN ...

  4. oracle11g 导出空表

    --对已存在的表 执行如下 ,要经过统计分析后 num_rows=0 才准确select 'alter table '||table_name||' allocate extent;' from us ...

  5. MemCahced 使用及常见问题说明

    前言 本文档是针对Memcached使用及常见问题的说明. 一.获取 1. MemCached 官网:http://www.memcached.org 下载:http://memcached.org/ ...

  6. event对象的clientX,offsetX,screenX,pageX和offsetTop,offsetHeight等等

    先总结下区别: event.clientX.event.clientY 鼠标相对于浏览器窗口可视区域的X,Y坐标(窗口坐标),可视区域不包括工具栏和滚动条.IE事件和标准事件都定义了这2个属性 eve ...

  7. 判断Mouse事件源类型

    //鼠标事件源类型 public enum MouseEventSource { Mouse, Pen, Touch } /// <summary> /// MainWindow.xaml ...

  8. 201709013工作日记--Android异步通信AsyncTask

    参考相关博客:http://blog.csdn.net/liuhe688/article/details/6532519 在Android中实现异步任务机制有两种方式,Handler和AsyncTas ...

  9. day10(IO流汇总)

    字节流 (Reader,Writer) 输入流  FileReader public class Demo { public static void main(String[] args) throw ...

  10. 转:解决windows下eclipse中android项目关联android library project失败问题

    近日,在做一个人人的第三方小项目.打算直接使用renren 的sdk 进行开发.因为renren的sdk是以android library project 形式发布的(关于这种project的内容可以 ...