¿Cómo puedo obtener el ancho de un ImageButton que está configurado en XML a 0 y tiene el tamaño del peso?

<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>

¿Cómo obtengo este valor que fue establecido automáticamente por el peso ?

Según lo establecido en XML como 0 , si lo hago: imageButton.getWidth(); o imageButton.getLayoutParams().width(); ambos devuelven 0 como en XML.

0
Woton Sampaio 9 sep. 2018 a las 09:28

4 respuestas

La mejor respuesta

Es posible usar el siguiente fragmento:

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(); 
    } 
});
1
aminography 9 sep. 2018 a las 06:45

Debe usar addOnPreDrawListener

view.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener()
{
    @Override
    public boolean onPreDraw()
    {
        if (view.getViewTreeObserver().isAlive())
            view.getViewTreeObserver().removeOnPreDrawListener(this);

        // put your code here
        return false;
    }
});
1
Anubhav Gupta 9 sep. 2018 a las 06:53
Button button;
button = (Button) findViewById(R.id.button);

int buttonWidth = button.getWidth();

// Showing the Result
Toast.makeText(MainActivity.this, ""+buttonWidth, Toast.LENGTH_SHORT).show();

// Imagen de diseño ingrese la descripción de la imagen aquí

// Resultado

enter image description here

0
Abhishek Singh 9 sep. 2018 a las 06:56

Está dando 0 porque debe asegurarse de que el número entero en el que almacena el ancho no se declare como final.

No debería ser así: Haga clic para ver la imagen

0
Abhishek Singh 9 sep. 2018 a las 06:59