android 8.0 自定义控件onmesure获取宽度为0
16lz
2021-01-26
最近项目需要适配8.0版本,自定义控件出现了下面的问题
第一次显示此弹窗字体出现了偏移,找到原因是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(); }
监听父控件绘制情况,绘制完毕之后重新再绘制一边自定义控件,这下可以获取到宽度了。完美解决问题
更多相关文章
- 列表中焦点处理
- Android(安卓)布局简介
- PhotoView的使用
- Android(安卓)UI设计——ExpandableListView控件
- Android(安卓)纯代码化编码2_基本控件
- react-native调用Android原生控件
- Android中AdapterView/Adapter的深度学习
- Android(安卓)ViewPager 取消预加载
- Android(安卓)tMeasureSpec 含义