Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

getWidth() and getHeight() always returning 0. Custom view

In a Fragment, I am inflating a Layout with multiple child View. I need to get the dimensions (width and height) of one of them which is a custom view.

Inside the custom view class I can do it easily. But if I try to do it from the fragment I always get 0 as dimensions.

 public void onViewCreated(View view, Bundle savedInstanceState) {      super.onViewCreated(view, savedInstanceState);     View culoide = view.findViewWithTag(DRAW_AREA_TAG);     Log.d("event", "culoide is: "+culoide.getWidth()); // always 0 } 

I figure that onViewCreated should be the right place to get it, but well this happens. I tried before super.onViewCreated, in debug it looks like 'findViewWithTag' finds the right view, tried with api 7 v4 support only.

Any help?

like image 826
quinestor Avatar asked Jun 04 '13 18:06

quinestor


1 Answers

You must wait until after the first measure and layout in order to get nonzero values for getWidth() and getHeight(). You can do this with a ViewTreeObserver.OnGlobalLayouListener

public void onViewCreated(final View view, Bundle saved) {     super.onViewCreated(view, saved);     view.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {         public void onGlobalLayout() {             if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {               view.getViewTreeObserver().removeOnGlobalLayoutListener(this);             } else {               view.getViewTreeObserver().removeGlobalOnLayoutListener(this);             }              // get width and height of the view         }     }); } 
like image 142
Karakuri Avatar answered Oct 01 '22 14:10

Karakuri