android面试题java_Android面试题大全 PDF 下载

主要内容:

2019 年百度 Android 面试题-公共技术点 之 View 绘制流程 View 绘制机制 1. View 树的绘图流程【文末有彩蛋】 当 Activity 接收到焦点的时候,它会被请求绘制布局,该请求由 Android framework 处理.绘制是从根节点开始,对布局树进行 measure 和 draw。整个 View 树的绘图流程在 ViewRoot.java 类的 performTraversals()函数展开,该函数 所做 的工作可简单概况为是否需要重新计算视图大小(measure)、是否需要重新 安置视图的位置(layout)、以及是否需要重绘(draw),流程图如下: View 绘制流程函数调用链

需要说明的是, 用户主动调用 request,只会出发 measure 和 layout 过程,而不会执行 draw 过程2. 概念 measure 和 layout 从整体上来看 Measure 和 Layout 两个步骤的执行:

树的遍历是有序的,由父视图到子视图,每一个 ViewGroup 负责测绘它所有的 子视图,而最底层的 View 会负责测绘自身。 具体分析 measure 过程由 measure(int, int)方法发起,从上到下有序的测量 View,在 measure 过程的最后,每个视图存储了自己的尺寸大小和测量规格。 layout 过 程由 layout(int, int, int, int)方法发起,也是自上而下进行遍历。在该过程中,每 个父视图会根据 measure 过程得到的尺寸来摆放自己的子视图。 measure 过程会为一个 View 及所有子节点的 mMeasuredWidth 和 mMeasuredHeight 变量赋值,该值可以通过 getMeasuredWidth()和 getMeasuredHeight()方法获得。而且这两个值必须在父视图约束范围之内,这 样才可以保证所有的父视图都接收所有子视图的测量。如果子视图对于 Measure 得到的大小不满意的时候,父视图会介入并设置测量规则进行第二次 measure。比如,父视图可以先根据未给定的 dimension 去测量每一个子视图, 如果最终子视图的未约束尺寸太大或者太小的时候,父视图就会使用一个确切的 大小再次对子视图进行 measure。 measure 过程传递尺寸的两个类

1.ViewGroup.LayoutParams (View 自身的布局参数) 2.MeasureSpecs 类(父视图对子视图的测量要求) ViewGroup.LayoutParams 这个类我们很常见,就是用来指定视图的高度和宽度等参数。对于每个视图的 height 和 width,你有以下选择: 1.具体值 2.MATCH_PARENT 表示子视图希望和父视图一样大(不包含 padding 值) 3.WRAP_CONTENT 表示视图为正好能包裹其内容大小(包含 padding 值) ViewGroup 的子类有其对应的 ViewGroup.LayoutParams 的子类。比如 RelativeLayout 拥有的 ViewGroup.LayoutParams 的子类 RelativeLayoutParams。 有时我们需要使用 view.getLayoutParams() 方法获取一个视图 LayoutParams, 然后进行强转,但由于不知道其具体类型,可能会导致强转错误。其实该方法得 到的就是其所在父视图类型的 LayoutParams,比如 View 的父控件为 RelativeLayout,那么得到的 LayoutParams 类型就为 RelativeLayoutParams

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值