基于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. Spinner功能和用法

    书中只是简单写了选择的界面,没有写出选择之后的结果显示,我做了进一步功能. MainActivity.java public class MainActivity extends Activity { ...

  2. Tensorflow currently has no official prebuild for your CUDA, cuDNN combination.

    INFO CUDA version: 10. ERROR cuDNN not found. See https://github.com/deepfakes/faceswap/blob/master/ ...

  3. MapGIS Mobile开发

    1. 先将Android开发环境配置好(包括Java + Eclipse + Android SDK) 2. 加载API类库(运行MapGIS 10 AndroidSDK.exe可以加载Mobile框 ...

  4. 好用的SHELL小编程

    1>判断输入为数字,字符或其他      脚本代码:      检测结果:   2>求平均数:   测试效果:     3>自减输出: 脚本代码: 测试效果:    4>在文件 ...

  5. 团队作业(HCL队)第三周—需求改进和系统分析

    2.需求&原型改进: 1.问题:游戏中坦克的移动和攻击怎么控制的? 改进: 在游戏中,我控制我方坦克,按下方向键坦克便向按下的方向移动,按下Z键,我方坦克发射炮弹.敌方坦克面向随机的方向移动, ...

  6. Android-卖票案例static-不推荐此方式

    需求描述:四个窗口一起卖票,把10张票卖完,不许多卖 先看一个错误的案例: package android.java.thread06; /** * 售票线程 */ class Booking ext ...

  7. Windows Phone 放开政策 - 应用内支付(IAP)可加入三方支付

    Windows Phone 应用商店在 今年(2013)11月04号 修改了商店政策 允许公司账户的应用使用三方支付SDK. 通过 App certification requirements cha ...

  8. Unity3D中随机函数的应用

    电子游戏中玩家与系统进行互动的乐趣绝大多数取决于事件发生的不可预知性和随机性.在unity3D的API中提供了Random类来解决随机问题. 最简单的应用就是在数组中随机选择一个元素,使用Random ...

  9. C# 委托和事件,简单示例说明问题

    先看看示例效果 按照国际惯例,得先说说概念. 委托(C# 编程指南) 事件(C# 编程指南) 以上内容来自MSDN. 委托源码 [委托] 概念和代码都有了.剩下的就是应用了,要是只知道概念不会用,那还 ...

  10. 第三节:使用Log4net和过滤器记录异常信息,返回异常给前端

    上次面试,遇到,在项目中如何处理业务异常和代码异常,使用txt记录异常信息后,如何直接区分出异常的类型,异常怎么分类处理,希望大家能帮我提出宝贵的意见,完善处理异常, 统一返回参数 public cl ...