¿Cómo configurar layout_gravity mediante programación?

Resuelto Adam Varhegyi asked hace 54 años • 20 respuestas

Mi pregunta es simple,

¿Cómo configurar mis botones layout_gravity mediante programación?

Encontré esto en Internet, pero simplemente me arroja una excepción de puntero nulo:

 Button MyButton = new Button(this);

    LinearLayout.LayoutParams  lllp=(LinearLayout.LayoutParams)MyButton.getLayoutParams();
    lllp.gravity=Gravity.RIGHT;
    MyButton.setLayoutParams(lllp); 


    MyLinearLayout.addView(MyButton);

¿Alguna solución?

Adam Varhegyi avatar Jan 01 '70 08:01 Adam Varhegyi
Aceptado

Java

LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT);
params.weight = 1.0f;
params.gravity = Gravity.TOP;

button.setLayoutParams(params);

Kotlin

val params = LinearLayout.LayoutParams(
    LinearLayout.LayoutParams.WRAP_CONTENT,
    LinearLayout.LayoutParams.WRAP_CONTENT
).apply {
    weight = 1.0f
    gravity = Gravity.TOP
}
button.setLayoutParams(params)

Para conocer los valores de gravedad y cómo configurar la gravedad, consulte Gravity .

Básicamente, debes elegir el LayoutParamsdependiendo del padre. Puede ser RelativeLayout, LinearLayoutetc...

Karthi avatar Nov 08 '2011 11:11 Karthi

Odiaría resucitar hilos antiguos, pero este es un problema que no se responde correctamente y, además, yo mismo me he encontrado con este problema.

Aquí está la parte larga, si solo está interesado en la respuesta, desplácese hasta el código:

android:gravityy android:layout_gravitytrabajar de manera diferente. Aquí hay un artículo que leí y que me ayudó.

GIST del artículo: la gravedad afecta la vista después de asignar la altura/ancho. Por lo tanto, el centro de gravedad no afectará una vista realizada con MATCH_PARENT (considérelo como un margen automático). layout_gravity center Afectará la vista que es MATCH_PARENT (considérelo como un panel automático).

Básicamente, android:layout_gravityNO SE PUEDE acceder mediante programación, solo android:gravity. En el caso del OP y en el mío, la respuesta aceptada no coloca el botón verticalmente en el centro.

Para mejorar la respuesta de Karthi:

LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);

params.gravity = Gravity.CENTER;
button.setLayoutParams(params);

Enlace a LinearLayout.LayoutParams.

android:layout_gravitymuestra "No hay métodos relacionados", lo que significa que no se puede acceder mediante programación. Mientras que la gravedad es un campo en la clase.

Uknight avatar Nov 12 '2012 07:11 Uknight