¿Cuál es la diferencia entre gravedad y diseño_gravity en Android?
Sé que podemos establecer los siguientes valores para las propiedades android:gravity
y :android:layout_gravity
center
center_vertical
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
?
Sus nombres deberían ayudarte:
android:gravity
establece la gravedad del contenido (es decir, sus subvistas) del objeto en el queView
se utiliza.android:layout_gravity
establece la gravedad deView
oLayout
en relación con su padre.
Y un ejemplo está aquí .
Dentro fuera
gravity
organiza el contenido dentro de la vista.layout_gravity
organiza la posición de la vista fuera de sí misma.
A veces también ayuda ver una imagen. El verde y el azul son TextViews
y los otros dos colores de fondo son LinearLayouts
.
Notas
- No
layout_gravity
funciona para vistas en un archivoRelativeLayout
. Úselo para vistas en aLinearLayout
oFrameLayout
. Consulte mi respuesta complementaria para obtener más detalles. - El ancho (o alto) de la vista tiene que ser mayor que su contenido. De lo contrario
gravity
no tendrá ningún efecto. Por lo tanto,wrap_content
ygravity
juntos no tienen sentido. - El ancho (o alto) de la vista debe ser menor que el del padre. De lo contrario
layout_gravity
no tendrá ningún efecto. Por lo tanto,match_parent
ylayout_gravity
juntos no tienen sentido. - Se
layout_gravity=center
ven igual quelayout_gravity=center_horizontal
aquí porque tienen un diseño lineal vertical. En este caso, no puedes centrar verticalmente, por lo quelayout_gravity=center
solo centras horizontalmente. - Esta respuesta solo trataba sobre la configuración
gravity
ylayout_gravity
las vistas dentro de un diseño. Para ver qué sucede cuando configura elgravity
diseño principal, consulte la respuesta complementaria a la que me referí anteriormente. (Resumen:gravity
no funciona bien en aRelativeLayout
pero puede ser útil con aLinearLayout
).
Recuerde, el diseño _gravity organiza una vista en su diseño . La gravedad organiza el contenido dentro de la vista.
XML
Aquí está el xml de la imagen de arriba para su referencia:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:background="#e3e2ad"
android:orientation="vertical" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:textSize="24sp"
android:text="gravity=" />
<TextView
android:layout_width="200dp"
android:layout_height="40dp"
android:background="#bcf5b1"
android:gravity="left"
android:text="left" />
<TextView
android:layout_width="200dp"
android:layout_height="40dp"
android:background="#aacaff"
android:gravity="center_horizontal"
android:text="center_horizontal" />
<TextView
android:layout_width="200dp"
android:layout_height="40dp"
android:background="#bcf5b1"
android:gravity="right"
android:text="right" />
<TextView
android:layout_width="200dp"
android:layout_height="40dp"
android:background="#aacaff"
android:gravity="center"
android:text="center" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:background="#d6c6cd"
android:orientation="vertical" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:textSize="24sp"
android:text="layout_gravity=" />
<TextView
android:layout_width="200dp"
android:layout_height="40dp"
android:layout_gravity="left"
android:background="#bcf5b1"
android:text="left" />
<TextView
android:layout_width="200dp"
android:layout_height="40dp"
android:layout_gravity="center_horizontal"
android:background="#aacaff"
android:text="center_horizontal" />
<TextView
android:layout_width="200dp"
android:layout_height="40dp"
android:layout_gravity="right"
android:background="#bcf5b1"
android:text="right" />
<TextView
android:layout_width="200dp"
android:layout_height="40dp"
android:layout_gravity="center"
android:background="#aacaff"
android:text="center" />
</LinearLayout>
</LinearLayout>
Relacionado
- Diferencia entre el relleno y el margen de una vista
- Match_parent frente a wrap_content
- Cómo configurar la gravedad y la gravedad del diseño de un LinearLayout mediante programación
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 interior de esa vista. Especifica en qué dirección debe alinearse su contenido.
Equivalentes HTML/CSS
(si tiene experiencia en desarrollo web)
Android | CSS
————————————————————————+————————————
android:layout_gravity | float
android:gravity | text-align
Truco fácil para ayudarte a recordar
Tómelo layout-gravity
como "Gravedad exterior".