android布局

  • 布局过程的含义
    • 布局过程就是在程序运行时利用布局文件的代码来计算出实际尺寸的过程

 

  • 布局过程的工作内容
    • 两个阶段:测量阶段和布局阶段
    • 测量阶段:
      • 从上到下递归地调用每个View或者ViewGroup的measure()方法测量他们的尺寸并计算他们的位置

 

    • 布局阶段:
      • 从上到下递归地调用每个View或ViewGroup的layout()方法,把他们测得的尺寸和位置赋值给他们

 

  • VIew或者ViewGroup的布局过程
    • 测量阶段,measure()方法被父view调用,在measure()中做一些优化和准备工作后,调用onmeasure()来进行实际的自我测量,onMeasure()做的事view和ViewGroup不一样:
      • View:View在onMeasure()中会计算出自己的尺寸然后保存
      • ViewGroup:viewgroup在onMeasure()中会调用所有子view的measure()让它们进行自我测量,并根据子view计算出的期望尺寸来计算出他的实际尺寸和位置(实际上99.9%的父view都会是用子view给出的期望尺寸来作为实际尺寸),然后保存。同时会根据子view的尺寸和位置来确定自己的尺寸然后保存
    • 布局阶段,layout()方法被父view调用,在layout()中,它会保存父view传进来的尺寸和自己的位置,并调用onLayout()方法来进行实际的内部布局。onLayout()做的事,View和ViewGroup也不一样
      • View:由于没有子view,所以view的onLayout()什么也不做
      • VIewGroup:ViewGroup在OnLayout()方法中会调用自己所有子view的layout方法,把他们的尺寸和位置传给它们,让它们完成自我的内部布局。

 

布局过程自定义的方式

三类:

  1. 重写 onMeasure() 来修改已有的 View 的尺寸;
  2. 重写 onMeasure() 来全新定制自定义 View 的尺寸;
  3. 重写 onMeasure() 和 onLayout() 来全新定制自定义 ViewGroup 的内部布局。

第一类自定义的具体做法

也就是重写 onMeasure() 来修改已有的 View 的尺寸的具体做法:

  1. 重写 onMeasure() 方法,并在里面调用 super.onMeasure(),触发原有的自我测量;
  2. 在 super.onMeasure() 的下面用 getMeasuredWidth() 和 getMeasuredHeight() 来获取到之前的测量结果,并使用自己的算法,根据测量结果计算出新的结果;
  3. 调用 setMeasuredDimension() 来保存新的结果。

posted on 2018-09-11 11:24  endian11  阅读(98)  评论(0)    收藏  举报

导航