measureAndLayout

第一部份

1.measure 是一个计算视图窗口大小的过程,measure的本质是把视图窗口的相对值转化为绝对值的过程。view的最终的的measureWidth或measureHeight是被函数setMeasuredDimension(int, int) 设置。

所以不管 protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {

                     ...

                     ...


                 不管上面如何计算,最终measure 的尺寸都有

                 setMeasuredDimension(int, int)   //

}

2. 关于widthMeasureSpec, heightMeasureSpec , 这两个参数怎么获得的,我又怎么构造子view的widthmeasure和       heightMeasureSpec ?

         这两个参数是有parent view所能提供的宽、高和view本身的布局参数(就是我们在xml设置的layout_width,layout_height)共同决定的决定的。这点可以可以在ViewGroup的方法getChildMeasureSpec()中得到验证。

         所以一个view的measure dimen 是由三方共同作用的,第一,parent view 所留下的空间。第二,使用view的人(就是在xml中定义layout_width或layout_height的人)。第三 定义view的人,就是给view写代码的人,也就是在onMeasure()中写代码的。不要把第二、三类人混淆起来,其实二者在逻辑上是完全不同的人。

3. protected void onLayout(boolean changed, int l, int t, int r, int b) {

          //在这里设置child view的位置。需要利用上面 measureWidth和onMeasureHeigh.

         // 当然,如果你也可以不管不顾,就是 child view强制设置位置是完全可以的


          ...

          ...

         childView.layout(childL,childT, childR,childB);

    }

第二部分


1. "一个view的measure dimen 是由三方共同作用的"   
    ? 还有没这样的机制。   使用者、约束条件、实现者










评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值