美文网首页
android 自定义控件onmesure获取宽度为0

android 自定义控件onmesure获取宽度为0

作者: 指尖劃過諾言 | 来源:发表于2021-02-01 10:35 被阅读0次

    最近项目需要适配8.0版本,自定义控件出现了下面的问题


    图片.png

    第一次显示此弹窗字体出现了偏移,找到原因是textpaint在绘制文字的时候

    canvas.drawText(itemText, x + (controlWidth / 2) -textRect.width()/2, height,
    textPaint);

    其中controlwidth宽度也就是控件宽度为0.

    发现在控件onmesure时 getwidth()方法获取到宽度为0. 一番排查发现,自定义控件在onmesure时,父控件并没有绘制完毕,导致
    自定义控件宽度为0(不知道是不是8.0有什么改动),然后做了如下修改

    llCover.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
         @Override
         public void onGlobalLayout() {
            llCover.getViewTreeObserver()
                  .removeGlobalOnLayoutListener(this);
         pick_province.requestLayout();
         pick_city.requestLayout();
         pick_district.requestLayout();
         }
    

    监听父控件绘制情况,绘制完毕之后重新再绘制一边自定义控件,这下可以获取到宽度了。完美解决问题


    图片.png

    相关文章

      网友评论

          本文标题:android 自定义控件onmesure获取宽度为0

          本文链接:https://www.haomeiwen.com/subject/kswzrktx.html