最近项目需要适配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();         }

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

 

更多相关文章

  1. 列表中焦点处理
  2. Android(安卓)布局简介
  3. PhotoView的使用
  4. Android(安卓)UI设计——ExpandableListView控件
  5. Android(安卓)纯代码化编码2_基本控件
  6. react-native调用Android原生控件
  7. Android中AdapterView/Adapter的深度学习
  8. Android(安卓)ViewPager 取消预加载
  9. Android(安卓)tMeasureSpec 含义

随机推荐

  1. Unity 调用 Android(安卓)Native 方法(一
  2. android 建议在onPause和onStop处理的事
  3. 在Windows下搭建Android开发环境
  4. Android(安卓)高通代码预制apk可卸载,恢复
  5. Android(安卓)timer
  6. listView 中relativeLayout 布局的 andro
  7. Android(安卓)Activity 切屏处理
  8. android五种布局模式
  9. 【Android学习笔记】AutoCompleteTextVie
  10. android通过httpClient请求获取JSON数据