android view getWidth()即使在onPreDraw()中也返回0

时间:2018-08-28 13:30:18

标签: android text size width android-viewtreeobserver

基于SOF中的答案,例如this

与上述问题链接中的问题开启者不同,我尝试过足够晚地测量视图(onPreDraw)。

我有此代码:

ViewTreeObserver viewTreeObserver = myAccountView.getViewTreeObserver();
viewTreeObserver.addOnPreDrawListener(
    new OnPreDrawListener() {

      @Override
      public boolean onPreDraw() {

        if (viewTreeObserver.isAlive()) {
          viewTreeObserver.removeOnPreDrawListener(this);
        }

        int measuredWidth = myAccountView.getMeasuredWidth();
        int width = myAccountView.getWidth();

        return true;
      }
    });

}

尽管如此,measuredWidthwidth始终为0

如何获取以像素为单位的视图宽度?

1 个答案:

答案 0 :(得分:0)

我假设您在RecyclerView.Apadter或类似的地方添加OnPreDrawListener?

如果不直接删除侦听器,则会多次调用

onPreDraw。因此,请等到View的宽度为正,然后再删除OnPreDrawListener。

@Override
public boolean onPreDraw() {
      // imageView might not be drawn yet..
      if (myAccountView.getWidth() < 1) {
           return true;
      } else {
         viewTreeObserver.removeOnPreDrawListener(this);

         //..you can do all your calculation here

         //..and afterwards return
         return true
      }
}