标签:
android框架不会绘制处于无效区域中的view, 并且会帮你绘制背景view.
你可以调用invalidate()方法来强制一个view重新绘制.
绘制布局是一个两次的过程: 一个测量过程和一个布局过程. 测量过程实现在measure(int,int)中, 是对View树的一个自顶向下的遍历. 每个View将尺寸要求向下一层传递. 在测量过程的最后, 每个view储存了它的测量值. 第二个过程在layour(int,int,int,int)中发生, 同样从上到下. 在这一个过程中每个父元素负责根据在测量过程中计算的大小, 将子元素放在合适的位置.
当一个View的measure()方法返回时, 它和它的后代元素的getMeasuredWidth()和getMeasuredHeight()值必须被设定. 一个view的测量宽度和测量高度必须遵循它的父View的限制. 这将保证在测量过程之后, 所有的父元素接受它们的子元素的测量值. 一个父View可能对它的子元素不止调用一次measure(). 例如, 父元素可能不带参数的测量每个子元素一次来得到它们希望的大小, 然后再次调用带参数的measure()如果子元素的大小超过限制. (即, 如果子元素相互无法协调, 父元素将为它们设置规则.)
使用requestLayout()来初始化一个布局. 该方法一般由一个View对自身调用, 当它认为它无法置于它当前的限制区域内时.
测量过程使用两个类来传递尺寸. View使用View.MeasureSpec来告诉它们的父元素它们希望如何被测量和放置. LayoutParams类描述了一个View希望它的长和宽各为多少. 它可以指定下列的一个:
LayoutParams 的不同子类可用于不同的ViewGroup子类. 例如RelativeLayout 有它自己的LayoutParams子类, 该子类包括了让每个子View水平和竖直居中的功能.
MeasureSpecs 可用来将要求向下传递. 一个MeasureSpec 可以为三种模式中的一种:
标签:
原文地址:http://www.cnblogs.com/xgjblog/p/4837645.html