[Android学习笔记]view的layout过程学习

View从创建到显示到屏幕需要经历几个过程:

measure -> layout -> draw

measure过程:计算view所占屏幕大小
layout过程:设置view在屏幕的位置
draw过程:绘制view


 

继承自view的控件的layout过程

layout过程相对measure过程比较简单,其作用是将view绘制到合适的位置


layout方法:

/* final 标识符 , 不能被重载 , 参数为每个视图位于父视图的坐标轴
    * @param l Left position, relative to parent
    * @param t Top position, relative to parent
    * @param r Right position, relative to parent
    * @param b Bottom position, relative to parent
    */
   public final void layout(int l, int t, int r, int b) {
       boolean changed = setFrame(l, t, r, b); //设置每个视图位于父视图的坐标轴
       if (changed || (mPrivateFlags & LAYOUT_REQUIRED) == LAYOUT_REQUIRED) {
           if (ViewDebug.TRACE_HIERARCHY) {
               ViewDebug.trace(this, ViewDebug.HierarchyTraceType.ON_LAYOUT);
           }

           onLayout(changed, l, t, r, b);//回调onLayout函数 ,设置每个子视图的布局
           mPrivateFlags &= ~LAYOUT_REQUIRED;
       }
       mPrivateFlags &= ~FORCE_LAYOUT;
   }

可见,当父元素呈现时候,会调用子view的layout方法,把子view放到合适的位置,layout中回调子
view的onLayout方法,实现具体定制

一般情况下,继承自view的控件不需要重写onLayout方法

人生就是一局不能Again的DOTA
原文地址:https://www.cnblogs.com/hellenism/p/3675219.html