Diferencia entre gravedad y layout_gravity en Android


Answers

La diferencia

android:layout_gravity es la gravedad Exterior de la Vista. Especifica la dirección en la que la vista debe tocar el borde de su padre.

android:gravity es la gravedad interna de esa Vista. Especifica en qué dirección se debe alinear su contenido.

Equivalentes HTML / CSS

Android                 | CSS
————————————————————————+————————————
android:layout_gravity  | float
android:gravity         | text-align

Truco fácil para ayudarte a recordar

Tome layout-gravity como "Lay-outside-gravity".

Question

Sé que podemos establecer los siguientes valores para las propiedades android:gravity y android:layout_gravity :

  1. center
  2. center_vertical
  3. center_horizontal , etc.

Pero estoy confundido con respecto a ambos.

¿Cuál es la diferencia entre el uso de android:gravity y android:layout_gravity ?




android:gravity se usa para especificar cómo colocar el contenido del objeto dentro del mismo objeto. En otra palabra, android: gravedad se usa para especificar la gravedad del contenido de la vista.

android:layout_gravity es una atribución que el niño puede proporcionar a su padre, para especificar la gravedad de la vista dentro de sus padres.

Para más detalles, puede visitar

http://developer.android.com/reference/android/widget/LinearLayout.LayoutParams.html




Un truco fácil para recordar esto es que la gravedad se aplica a nosotros dentro de la tierra. Entonces, android:gravity es para el interior de la vista.

Recuerda el out out lay out _gravity que te ayudaría a recordar que android:layout_gravity se referiría a fuera de la vista




gravedad : se usa para vistas simples como textview, edittext, etc.

layout_gravity : se usa para la vista actual solo la gravedad en el contexto de su vista parental relativa como Layout lineal o FrameLayout para hacer la vista en el centro o cualquier otra gravedad de su elemento primario.




Algo que vi en el blog de Sandip que casi extraño, solucionó mi problema. Él dijo que layout_gravity NO FUNCIONA CON LinearLayout .

Si está utilizando LinearLayout y la configuración de gravedad lo está volviendo loco (como yo), cambie a otra cosa.

De hecho, layout_alignParentLeft RelativeLayout luego utilicé layout_alignParentLeft y layout_alignParentRight en los 2 contenidos de TextView para ponerlos en una línea y pasar a la izquierda y a la derecha.




Respuesta corta: use android:gravity o setGravity() para controlar la gravedad de todas las vistas de un contenedor; use android:layout_gravity o setLayoutParams() para controlar la gravedad de una vista individual en un contenedor.

Larga historia: para controlar la gravedad en un contenedor de diseño lineal como LinearLayout o RadioGroup , hay dos enfoques:

1) Para controlar la gravedad de TODAS las vistas de un contenedor LinearLayout (como hiciste en tu libro), utiliza android:gravity (no android:layout_gravity ) en el archivo XML de diseño o el método setGravity() en el código.

2) Para controlar la gravedad de una vista infantil en su contenedor, use el atributo de android:layout_gravity XML. En el código, uno necesita obtener los LinearLayout.LayoutParams de la vista y establecer su gravedad. Aquí hay un ejemplo de código que establece un botón para abajo en un contenedor orientado horizontalmente:

import android.widget.LinearLayout.LayoutParams;
import android.view.Gravity;
...

Button button = (Button) findViewById(R.id.MyButtonId);
// need to cast to LinearLayout.LayoutParams to access the gravity field
LayoutParams params = (LayoutParams)button.getLayoutParams(); 
params.gravity = Gravity.BOTTOM;
button.setLayoutParams(params);

Para el contenedor LinearLayout horizontal, la gravedad horizontal de su vista secundaria se alinea a la izquierda una tras otra y no se puede cambiar. Configuración de android:layout_gravity a center_horizontal no tiene ningún efecto. La gravedad vertical predeterminada es central (o central_vertical) y puede cambiarse a superior o inferior. En realidad, el valor predeterminado de layout_gravity es -1 pero Android lo colocó verticalmente.

Para cambiar las posiciones horizontales de las vistas secundarias en un contenedor lineal horizontal, se puede usar layout_weight , margin y padding de la vista secundaria.

De forma similar, para el contenedor de grupo de vista vertical, la gravedad vertical de su vista secundaria está alineada en la parte superior una debajo de la otra y no se puede cambiar. La gravedad horizontal predeterminada es central (o center_horizontal ) y se puede cambiar a izquierda o derecha.

En realidad, una vista infantil como un botón también tiene android:gravity atributo XML de android:gravity y el método setGravity() para controlar sus vistas secundarias: el texto que setGravity() . Button.setGravity(int) está vinculado a esta entrada de developer.android.com .




Mira la imagen para ser claro acerca de la gravedad




Si queremos establecer la gravedad del contenido dentro de una vista, usaremos "android: gravity", y si queremos establecer la gravedad de esta vista (como un todo) dentro de su vista principal, usaremos "android: layout_gravity ".




android:gravity -> Establece la gravedad del contenido de la vista en la que se usa.

android:layout_gravity -> Establece la gravedad de la vista de Parent's o Layout




Links