从根布局的performTraversals()方法开始,Traversal的意思就是遍历,也就是会从上到下遍历整个view树,每个view都有绘制方法绘制自己,viewgroup绘制自己的同时还要负责通知自己子view的绘制
绘制方法:measure--->layou----->draw
measure:
在ViewGroup中的measureChildren()方法中会遍历测量ViewGroup中所有的View,当View的可见性处于GONE状态时,不对其进行测量
自定义View时手动处理wrap_content时的情形
直接继承View的控件需要重写onMeasure方法并设置wrap_content时的自身大小,否则在布局中使 用 wrap_content就相当于使用match_parent。此时,可以在wrap_content的情况下(对应MeasureSpec.AT_MOST)指定内部宽/高(mWidth和mHeight)。
在activity中获取view高度
view.post()
layout:
会通过setFrame方法来设定View的四个顶点的位置,即View在父容器中的位置。然后,会执行到onLayout空方法,子类如果是ViewGroup类型,则重写这个方法,实现ViewGroup中所有View控件布局流程。
网友评论