Search code examples
javaandroidparameterswidth

How to get ImageButton width


How can I get the width of an ImageButton that is set in XML to 0 and has size from the weight?

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="10dp"
    android:layout_marginRight="10dp"
    android:layout_marginLeft="10dp"
    android:orientation="horizontal">

    <ImageButton
        android:id="@+id/fluido"
        android:layout_width="0dp"
        android:layout_height="70dp"
        android:layout_marginEnd="10dp"
        android:layout_marginRight="10dp"
        android:tint="@color/icon"
        android:layout_weight="0.33"
        app:srcCompat="@drawable/fluido" />

        <......../>

</LinearLayout>

How do I get this value that was automatically set by the weight?

As set in XML as 0, if I do: imageButton.getWidth(); or imageButton.getLayoutParams().width(); both return 0 as in XML.


Solution

  • It is possible using below snippet:

    yourView.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() { 
    
        @Override 
        public void onGlobalLayout() { 
            if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) {
                yourView.getViewTreeObserver().removeGlobalOnLayoutListener(this);
            } else {
                yourView.getViewTreeObserver().removeOnGlobalLayoutListener(this);
            } 
            // Correct view dimensions are here:
            int width  = yourView.getMeasuredWidth();
            int height = yourView.getMeasuredHeight(); 
        } 
    });