Pregunta Diferencia entre gravedad y layout_gravity en Android


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

  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?


1149
2017-08-14 09:28


origen


Respuestas:


Sus nombres deberían ayudarte:

  • android:gravity establece la gravedad de los contenidos (es decir, sus subvistas) del View es usado en.
  • android:layout_gravity establece la gravedad de la View o Layout relativo a su padre

Y un ejemplo es aquí.


1196
2017-08-14 09:31



La diferencia

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

android:gravity es el Dentro la gravedad 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

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


446
2017-07-25 17:07



Dentro fuera

  • gravity arregla el contenido dentro la vista.
  • layfuera_gravity organiza la posición de la vista fuera de de sí mismo.

A veces ayuda ver una imagen también. El verde y el azul son TextViews y los otros dos colores de fondo son LinearLayouts.

enter image description here

Notas

  • los layout_gravity no funciona para vistas en una RelativeLayout. Úselo para las vistas en una LinearLayout o FrameLayout. Mira mi respuesta suplementaria para más detalles.
  • El ancho (o la altura) de la vista debe ser mayor que su contenido. De otra manera gravity no tendrá ningún efecto. Así, wrap_content y gravity no tienen sentido juntos.
  • El ancho (o la altura) de la vista debe ser menor que el elemento principal. De otra manera layout_gravity no tendrá ningún efecto. Así, match_parent y layout_gravity no tienen sentido juntos.
  • los layout_gravity=center se ve igual layout_gravity=center_horizontal aquí porque están en un diseño lineal vertical. No se puede centrar verticalmente en este caso, por lo layout_gravity=center solo se centra horizontalmente
  • Esta respuesta solo se refiere a la configuración gravity y layout_gravity en las vistas dentro de un diseño. Para ver qué pasa cuando configuras el gravity del diseño del padre, sírvase ver respuesta suplementaria a lo que me referí anteriormente. (Resumen: gravity no funciona bien en una RelativeLayout pero puede ser útil con un LinearLayout.)

Así que recuerda, diseño_gravity arregla una vista en su diseño. Gravity 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


433
2017-10-04 05:43



Respuesta corta: uso android:gravity o setGravity() para controlar la gravedad de todas las vistas de un contenedor para niños; utilizar 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 niño LinearLayout contenedor (como lo hizo en su libro), use android:gravity (no android:layout_gravity) en el archivo XML de diseño o setGravity() método en código.

2) Para controlar la gravedad de una vista infantil en su contenedor, use android:layout_gravity Atributo XML En el código, uno necesita obtener el 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 horizontal LinearLayout contenedor, la gravedad horizontal de su vista secundaria se alinea a la izquierda una tras otra y no se puede cambiar. Ajuste android:layout_gravity a center_horizontal no tiene efecto. La gravedad vertical predeterminada es central (o central_vertical) y puede cambiarse a superior o inferior. En realidad, el valor predeterminado layout_gravity el valor 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, margen y relleno de la vista de niño.

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 el centro (o center_horizontal) y se puede cambiar a izquierda o derecha.

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


35
2017-07-30 20:01



De lo que puedo reunir layout_gravity es la gravedad de esa vista dentro de su padre, y gravedad es la gravedad de los niños dentro de esa vista.

Creo que esto es correcto, pero la mejor manera de descubrirlo es jugar.


32
2017-08-14 09:37



Mira la imagen para ser claro acerca de la gravedad


23
2018-02-04 07:17



Aunque la pregunta ya está respondida, tengo algunas muestras que demuestran el uso de la gravedad, layout_gravity y layout_weight.

Puede encontrar los ejemplos en http://juanpickselov.com/LayoutExamples.zip 

Creé los archivos en Eclipse, eliminé las subcarpetas .svn e incluí estilos, cadenas, colores, etc. Los archivos de diseño son el punto principal de las demostraciones. Como soy principiante en Java y Android, uno puede encontrar que Java es ineficiente. Los archivos se pueden copiar en un proyecto de Eclipse o también los he usado en Netbeans con el complemento de desarrollo de Android disponible para ese IDE.


10
2017-11-23 05:43