zoukankan      html  css  js  c++  java
  • 【Android

      View的工作过程分为三个过程:

    • View的measure过程;
    • View的layout过程;
    • View的draw过程。

      我们知道,一个Activity就是一个窗口,这个窗口中包含一个Window、一个DecorView和一个ViewRootImpl对象,而应用中的所有Window都由一个WindowManager对象管理。ViewRootImpl是连接WindowManager和DecorView的纽带,它可以接受WindowManager传过来的消息,将消息传递给DecorView,DecorView再将消息进行分发。另外,View的三大流程(测量、布局和绘制流程)也都是在ViewRootImpl中完成的。

      ViewRootImpl中有一个 performTraversals() 方法,在这个方法中会依次调用 performMeasure() 、 performLayout() 、 performDraw() 三个方法,这三个方法分别完成DecorView的measure、layout和draw这三大流程。在performMeasure()方法中会调用 measure() 方法,在measure()方法中又会调用 onMeasure() 方法;在onMeasure()方法中则会对所有子元素进行measure过程,这个时候measure流程就从父容器传递到子元素中,这样就完成了一次measure过程。接着,子元素会重复父元素的measure过程,这样反复就完成了整个View Treee的遍历。同理,performLayout()方法和performDraw()方法的流程和performMeasure()方法的流程是类似的。整个流程如下图所示。

      DecoreView是整个Activity中的顶层布局,这个布局默认是一个垂直排列的LinearLayout,上面一部分叫做标题栏,下面一部分叫做内容区域,如下图所示。可以看出,这张图就是我们使用默认主题运行Android程序时显示的界面架构。其中,内容区域叫做 content ,我们可以通过 ViewGroup content = (ViewGroup) findViewById(android.R.id.content) 的方式找到这个content布局,这个布局就是放置我们项目XML文件中编写的界面布局的。因此,我们在Activity中都是使用 setContentView() 方法设置界面的布局,而不是使用setView()或者setLayout()。

      再回来介绍View的三大流程:

       measure 过程决定了View的宽/高。measure完成之后,我们可以通过 getMeasuredWidth() 、 getMeasuredHeight() 方法获取到View测量后的宽度和高度。特别说明,这里后的的宽高是测量后的宽高,不是View实际的宽高。关于measure过程的具体流程请参考:【measure过程解析】

       layout 过程决定了View四个顶点的坐标和View的实际宽/高。layout完成之后,我们可以通过 getTop() 、 getBottom() 、 getLeft() 和 getRight() 四个方法获取View的四个边界的位置,也可以通过 getWidth() 和 getHeight() 方法来获取View的最终宽/高。关于layout过程的具体流程请参考:【layout过程解析】

       draw 过程决定了View的显示。只有在draw完成之后,View才能呈现在屏幕上。关于draw过程的具体流程请参考:【draw过程解析】

  • 相关阅读:
    How to change hostname on SLE
    How to install starDIct on suse OS?
    python logging usage
    How to reset password for unknow root
    How to use wget ?
    How to only capute sub-matched character by grep
    How to inspect who is caller of func and who is the class of instance
    How to use groovy script on jenkins
    Vim ide for shell development
    linux高性能服务器编程 (二) --IP协议详解
  • 原文地址:https://www.cnblogs.com/itgungnir/p/6722307.html
Copyright © 2011-2022 走看看