android view getWidth() returns 0 even in onPreDraw()

572 Views Asked by At

Based on answers in SOF, like this

I have tried to measure the view late enough (onPreDraw) unlike the question opener in the above question link.

I have this code:

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;
      }
    });

}

nevertheless, measuredWidth and width are always 0

how can i get the view's width in pixels?

1

There are 1 best solutions below

0
On

I assume you add the OnPreDrawListener somewhere in an RecyclerView.Apadter or something similar?

onPreDraw will be called multiple times if you don't remove the listener directly. Therefore, wait until your View has a positive width and then remove the OnPreDrawListener.

@Override
public boolean onPreDraw() {
      if (myAccountView.getWidth() < 1) {
          // imageView might not be drawn yet
      } else {
         viewTreeObserver.removeOnPreDrawListener(this);
      
         // you can do all your calculation here
      }

      return true;
}