¿Cuál es la diferencia entre fill_parent y wrap_content?

276

En Android, al diseñar widgets, ¿cuál es la diferencia entre fill_parent( match_parenten API Nivel 8 y superior) y wrap_content?

¿Hay alguna documentación a la que pueda apuntar? Estoy interesado en entenderlo muy bien.

pupeno
fuente
33
Tenga en cuenta que fill_parentse cambió el nombre match_parenten API Nivel 8 y superior.
gfrigon

Respuestas:

266

Cualquiera de los atributos se puede aplicar al tamaño horizontal o vertical de la Vista (control visual). Se utiliza para establecer un tamaño de Vista o Diseños en función de su contenido o del tamaño de su diseño principal en lugar de especificar explícitamente una dimensión.

fill_parent(en desuso y renombrado MATCH_PARENTen API Nivel 8 y superior)

Establecer el diseño de un widget en fill_parent lo forzará a expandirse para ocupar tanto espacio como esté disponible dentro del elemento de diseño en el que se ha colocado. Es más o menos equivalente a configurar el estilo de acoplamiento de un Control de formulario de Windows Fill.

Establecer un diseño o control de nivel superior para fill_parent lo obligará a ocupar toda la pantalla.

wrap_content

Establecer el tamaño de una Vista en wrap_content lo forzará a expandirse solo lo suficiente como para contener los valores (o controles secundarios) que contiene. Para controles, como cuadros de texto (TextView) o imágenes (ImageView), esto ajustará el texto o la imagen que se muestra. Para los elementos de diseño, cambiará el tamaño del diseño para que se ajuste a los controles / diseños agregados como elementos secundarios.

Es aproximadamente el equivalente a establecer la Autosizepropiedad de un Control de Windows Form en True.

Documentación en linea

Hay algunos detalles en la documentación del código de Android aquí .

Reto Meier
fuente
12
¿Qué pasa si el ancho de la imagen es mayor que el ancho de la pantalla y configuro el ancho de la vista de imagen como fill_parent? ¿se comprimirá la imagen al tamaño de la pantalla?
John Watson el
@ JohnWatson, ¿encontraste tu respuesta? Tengo curiosidad también.
Rachael
Es bueno saber las propiedades equivalentes de Windows Form Control que se mencionan.
Rempelos
¿Qué has visto @JohnWatson? Cual es tu historia ? Cual es la respuesta ?
HopefulHelpful
36

fill_parent(en desuso) =match_parent
El borde de la vista secundaria se expande para coincidir con el borde de la vista primaria.

wrap_content
El borde de la vista secundaria se ajusta perfectamente a su propio contenido.

Aquí hay algunas imágenes para aclarar las cosas. El verde y el rojo son TextViews. El blanco es una LinearLayoutmuestra a través.

ingrese la descripción de la imagen aquí

Cada View(a TextView, an ImageView, a Button, etc.) necesita establecer el widthy heightla vista. En el archivo de diseño xml, podría verse así:

android:layout_width="wrap_content"
android:layout_height="match_parent"

Además de establecer el ancho y la altura en match_parento wrap_content, también puede establecerlos en algún valor absoluto:

android:layout_width="100dp"
android:layout_height="200dp"

Sin embargo, en general eso no es tan bueno porque no es tan flexible para dispositivos de diferentes tamaños. Después de haber entendido wrap_contenty match_parent, lo siguiente que debe aprender es layout_weight.

Ver también

XML para las imágenes de arriba

Diseño lineal vertical

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:layout_width="match_parent"
              android:layout_height="match_parent">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:text="width=wrap height=wrap"
        android:background="#c5e1b0"/>

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:text="width=match height=wrap"
        android:background="#f6c0c0"/>

    <TextView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:text="width=match height=match"
        android:background="#c5e1b0"/>

</LinearLayout>

Diseño lineal horizontal

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="horizontal"
              android:layout_width="match_parent"
              android:layout_height="match_parent">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:text="WrapWrap"
        android:background="#c5e1b0"/>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:text="WrapMatch"
        android:background="#f6c0c0"/>

    <TextView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:text="MatchMatch"
        android:background="#c5e1b0"/>

</LinearLayout>

Nota

La explicación en esta respuesta supone que no hay margen ni relleno . Pero incluso si lo hay, el concepto básico sigue siendo el mismo. El borde / espaciado de la vista solo se ajusta por el valor del margen o el relleno.

Suragch
fuente
9
  • fill_parent hará que el ancho o la altura del elemento sea tan grande como el elemento padre, en otras palabras, el contenedor.

  • wrap_content hará que el ancho o la altura sean tan grandes como sea necesario para contener los elementos que contiene.

Haga clic aquí para la referencia de ANDROID DOC

Devrath
fuente
¿Cuál será el contenedor? ¿Cómo rodear las vistas con diferentes contenedores?
Tejzeratul
2

fill_parent :

Se debe organizar un componente para fill_parentque sea obligatorio expandirlo para llenar los miembros de la unidad de diseño, tanto como sea posible en el espacio. Esto es consistente con la propiedad dockstyle del control de Windows. Un diseño o control establecido superior fill_parentlo obligará a ocupar toda la pantalla.

wrap_content

Configurar una vista del tamaño de wrap_contentserá forzado a ver se expande para mostrar todo el contenido. Los controles TextView e ImageView , por ejemplo, están configurados para wrap_contentmostrar todo su texto interno e imagen. Los elementos de diseño cambiarán el tamaño según el contenido. Configure una vista del tamaño del atributo Autosize wrap_contentaproximadamente equivalente a configurar un control de Windows para True.

Para obtener más información, consulte este enlace: http://developer.android.com/reference/android/view/ViewGroup.LayoutParams.html

IntelliJ Amiya
fuente