zoukankan      html  css  js  c++  java
  • [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
  • 相关阅读:
    母牛
    831. KMP字符串(模板)
    830. 单调栈
    829. 模拟队列
    827. 双链表
    826. 单链表
    易错之 Java字符串比较
    圆桌问题 (ArrayList+模拟)
    士兵队列训练问题 (队列+模拟)
    线段树模板集合
  • 原文地址:https://www.cnblogs.com/hellenism/p/3675219.html
Copyright © 2011-2022 走看看