自定义viewgroup中onMeasure 和onlayout的一点理解

onMeasure()自定义Viewgroup第一个被执行到的方法,这个方法用来测量这个viewgroup有多大和分别给每一个子控件设置大小的作用。当然了有时候viewgroup的大小是由它的子控件来确定的。

怎么设置大小呢 setMeasuredDimension(width, height); 方法来设置,下面一段代码是经典的设置自身大小的代码,首先 MeasureSpec.getMode()方法拿到模式,xml中经常定义wrap_content或者给了一个准确的值,就是mode,mode有三种,大家可以去百度这边不详细介绍了,viewgroup中还可以用getchild()方法拿到子view并且用for循环等方式给每个子view设置大小方法,至于这么设置你可以根据父控件传回来的大小来决定也可以子view自己决定然后父控件根据ziview的大小来设置他自身的大小,父控件的传回来的大小就是你在xml中定义的那个大小。

量完了大小那么就要确定位置了,

onlayout的作用是给所有的child安排大小和摆放位置

  •  int widthMode = MeasureSpec.getMode(widthMeasureSpec);  
  •         int heightMode = MeasureSpec.getMode(heightMeasureSpec);  
  •         int widthSize = MeasureSpec.getSize(widthMeasureSpec);  
  •         int heightSize = MeasureSpec.getSize(heightMeasureSpec);  
  •   
  •         int width;  
  •         int height;  
  •   
  •         ...   
  •   
  •         if (widthMode == MeasureSpec.EXACTLY) {  
  •             // Parent has told us how big to be. So be it.  
  •             width = widthSize;  
  •         } else {  
  •             if (mLayout != null && mEllipsize == null) {  
  •                 des = desired(mLayout);  
  •             }  
  •   
  •         ...  
  •   
  •         setMeasuredDimension(width, height); 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值