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 Nullpointer:
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?
android
android-layout
Adam Varhegyi
fuente
fuente
Respuestas:
Java
Kotlin
Para conocer los valores de gravedad y cómo configurar la gravedad, consulte Gravedad .
Básicamente, debe elegir
LayoutParams
dependiendo del padre. Puede serRelativeLayout
,LinearLayout
etc.fuente
layout_gravity
(eso esLayoutParams.gravity
). Elgravity
seríabutton.setGravity()
setGravity()
es el layout_gravity, pero esto está mal. Puedo aprobar que esta respuesta sea correcta para configurar layout_gravity mediante programación.Odiaría resucitar viejos hilos, pero este es un problema que no se responde correctamente y, además, 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 funciona de manera diferente. Aquí hay un artículo que he leído que me ayudó.
GIST del artículo: la gravedad afecta la vista después de que se asigna la altura / anchura. Por lo tanto, el centro de gravedad no afectará una vista que se realiza FILL_PARENT (piense en ello como margen automático). layout_gravity center afectará la vista que es FILL_PARENT (piense en ello como auto pad).
Básicamente, android: layout_gravity NO PUEDE tener acceso mediante programación, solo android: gravity. En el caso del OP y en mi caso, la respuesta aceptada no coloca el botón verticalmente en el centro.
Para mejorar la respuesta de Karthi:
Enlace a
LinearLayout.LayoutParams
.android: layout_gravity muestra "No hay métodos relacionados", lo que significa que no se puede acceder programáticamente. Mientras que la gravedad es un campo en la clase.
fuente
Para layout_gravity use la respuesta indicada por "karthi". Este método establece la gravedad para colocar a los niños dentro de la vista.
fuente
Tuve un problema similar con la configuración programática de layout_gravity en los botones en un GridLayout.
El truco consistía en establecer la gravedad en el diseño de botones Parámetros DESPUÉS de que el botón se añadiera a un elemento primario (GridLayout), de lo contrario , se ignoraría la gravedad .
fuente
Si desea cambiar la
layou_gravity
vista de una vista existente, haga esto:Recuerde usar el derecho
LayoutParams
basado en el tipo de diseño en el que se encuentra su vista. Ej:fuente
use esto para agregar más de una gravedad
fuente
Esta pregunta es antigua pero tuve el mismo problema y lo resolví así
fuente
KOTLIN configura más de una gravedad en FrameLayout sin cambiar el tamaño:
fuente
Yo uso algo así: (Xamarin y código C #)
SetGravity coloca mi textView en el centro del diseño. Entonces, la propiedad de diseño SetGravity se refiere al contenido del diseño
fuente
En caso de que necesite configurar Gravity para una Vista, use lo siguiente
Para configurar layout_gravity para el Botón, use el campo de gravedad para los parámetros de diseño como
prueba esta esperanza esto se despeja gracias
fuente
El resto de las respuestas son correctas, quiero agregar más explicaciones. Layout_gravity trata sobre cómo colocar la vista en la vista principal.
Debe establecer la gravedad ** después de llamar al método parentView.addView () **. Podemos ver el código:
Y el problema del puntero nulo es porque no está llamando a addView antes de getLayoutParams ().
La anotación ya decía "Este método puede devolver un valor nulo si esta Vista no está adjunta a un ViewGroup primario o {@ link # setLayoutParams (android.view.ViewGroup.LayoutParams)} no fue invocado con éxito. Cuando una Vista está adjunta a un padre ViewGroup, este método no debe devolver nulo ".
fuente
Si desea poner una vista en el centro del padre, puede hacerlo con el siguiente código.
Esta sección de código hace que LinearLayout coloque los primeros elementos de vista en el centro del elemento primario. Entonces, el sistema no considera el ancho inicial y el alto para organizar la vista en el centro. Hago bien la sección de código.
fuente
a RelativeLayout, prueba este código, funciona para mí:
yourLayoutParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
fuente
Perfectamente trabajando !!! Ninguna de las respuestas anteriores funciona para mí. En la configuración del archivo Xml, la gravedad y la disposición layout_gravity son diferentes. Mira el siguiente código
También verifique Esto, donde puede encontrar una explicación clara sobre la gravedad y el diseño_gravedad.
fuente
La mayoría de las respuestas anteriores son correctas, por lo tanto, escriba un método auxiliar, para que pueda usarlo directamente en su proyecto.
fuente
Cambié de LinearLayout.LayoutParams a RelativeLayout.LayoutParams para finalmente obtener el resultado que deseaba en una vista de círculo personalizada que creé.
Pero en lugar de la gravedad, usas addRule
RelativeLayout.LayoutParams mCircleParams = new RelativeLayout.LayoutParams (circleheight, circleheight);
fuente
Prueba este código
o
fuente
layout_gravity
nogravitiy
.fuente
fuente