自定义控件不显示,,,,,,填坑

自定义控件分为继承View和继承ViewGroup,两者不同。

1、继承View  必须重写 onLayout() 、onDraw()

因为View相当于没什么形状的控件,需要你去重写onDraw() 去自己画出来。重写onLayout() 为了指定 画在哪里。

2、继承ViewGroup  必须重写  onMeasure()、onLayout()

因为ViewGroup需要添加view进去,这里的view是指Android已经帮你画好的控件。但是手机不知道这个控件应该画多大,画在什么位置。所以要重写这个两个方法。而不用重写onDraw()。


下面说继承ViewGroup  我爬过的坑。

  1、重写onMeasure()方法,一定要在最后设置这个自定义控件的测量值   setMeasuredDimension();

2、如果给自定义控件,加入的控件还是ViewGroup的控件组,(继承ViewGroup的也算,如LinearLayout)。在重写的onMeasure()中,也一定要对 自定义控件的 childs 测量。如下代码 : child.measure(child.getWidth(),child.getHeight())   否则会导致控件不显示  

   因为自定义控件的 子控件还是继承ViewGroup的控件 所以还是需要测量大小。(自己的理解,不一定对。搜了许久没有看到合理解释)

3、关于setMeasuredDimension()   参数的选择。这个方法是设置 自定义控件 的大小。所以如果自定义控件的属性是 match_parent或者固定的数值,直接写 onMeasure()的两个参数就行,widthMeasureSpec和heightMeasureSpec   如果自定义控件的属性是  warp_content  就需要测量子控件的大小,把所有子控件所需要的长宽 当成参数,写到这个方法里。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值