¿Cómo configurar layout_gravity mediante programación?
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?
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 LayoutParams
dependiendo del padre. Puede ser RelativeLayout
, LinearLayout
etc...
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:gravity
y android:layout_gravity
trabajar 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_gravity
NO 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_gravity
muestra "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.