5

I am trying to get the width of a button whose android:layout_width is set to wrap_content. When I try to do that in onCreate() using getMeasuredWidth(), I get a value of zero because I think the view is not ready yet.

When should I get the width then? Is there any listener I can hook to when view is done initializing?

jeffreyveon
  • 13,400
  • 18
  • 79
  • 129

1 Answers1

13

You can add a tree observer to the layout. This should return the correct width and height. onCreate is called before the layout of the child views are done. So the width and height is not calculated yet. To get the height and width. Put this on the onCreate method

LinearLayout layout = (LinearLayout)findViewById(R.id.YOUD VIEW ID); 
ViewTreeObserver vto = layout.getViewTreeObserver();  
vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {  
    @Override  
    public void onGlobalLayout() {  
        this.layout.getViewTreeObserver().removeGlobalOnLayoutListener(this);  
        int width  = layout.getMeasuredWidth(); 
        int height = layout.getMeasuredHeight();  

    }  
}); 
blessanm86
  • 31,439
  • 14
  • 68
  • 79
  • 1
    FYI: `removeGlobalOnLayoutListener` is deprecated in newer APIs, and it is `removeOnGlobalLayoutListener` now. For more info: http://stackoverflow.com/a/16190337/487940 – harsimranb Jul 19 '16 at 17:15