Tengo esta sección en mi archivo de diseño:

<RelativeLayout>
    <LinearLayout android:layout_width="match_parent"
            android:layout_height="wrap_content">
        <TextView></TextView>
        <TextView></TextView>
    </LinearLayout>
</RelativeLayout>

Mi objetivo es establecer la gravedad de los elementos dentro del linearLayout y luego agregar un margen a todo el LinearLayout mediante programación.

Esto es lo que tengo:

linearLayout_textBackground.setGravity(gravity); //where gravity is the int of the desired gravity

RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(
                   RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
linearLayout_textBackground.setLayoutParams(layoutParams);
linearLayout_textBackground.requestLayout();

Me gustaría establecer el margen al usar layoutParams pero cuando ejecuto el código anterior, noto que mi valor de gravedad se ha restablecido. Sin embargo, si comento linearLayout_textBackground.setLayoutParams(layoutParams);, mi valor de gravedad está configurado correctamente.

¿Por qué se restablece la gravedad después de establecerLayoutParams en mi diseño?

0
riadrifai 14 nov. 2017 a las 13:26

2 respuestas

La mejor respuesta

Gracias a la respuesta de @ M.Saad Lakhan, noté que estaba creando una nueva referencia de los parámetros. Entonces, lo que terminé haciendo es obtener los parámetros reales del diseño:

RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) 
                    linearLayout_textBackground.getLayoutParams();

Esto solucionó el problema.

0
riadrifai 14 nov. 2017 a las 11:09

Cuando haces esto:

RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(
               RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);

Está creando una nueva referencia para sus parámetros de diseño, el que mencione aquí cambiará, los otros no mencionados se cambiarán a los valores predeterminados de Android. Si desea cambiar la gravedad, debe cambiarla después de crear nuevos parámetros como:

Utilice esto:

linearLayout_textBackground.setGravity(gravity);

Después de este:

linearLayout_textBackground.setLayoutParams(layoutParams);

O defina la gravedad de su diseño en la definición de layoutParams.

Pero la forma recomendada de configurar su gravedad es dentro de su xml de la siguiente manera:

android:layout_gravity="center"

Entonces no necesitas hacer esto:

linearLayout_textBackground.setGravity(gravity);
1
Muhammad Saad Rafique 14 nov. 2017 a las 10:46