android 8.0 自定義控制元件onmesure獲取寬度為0
阿新 • • 發佈:2018-12-15
最近專案需要適配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(); }
監聽父控制元件繪製情況,繪製完畢之後重新再繪製一邊自定義控制元件,這下可以獲取到寬度了。完美解決問題