2009-01-11 22 views
236

En Android, cuando se distribuyen los widgets, ¿cuál es la diferencia entre fill_parent (match_parent en API nivel 8 y superior) y wrap_content?¿Cuál es la diferencia entre fill_parent y wrap_content?

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

+26

Tenga en cuenta que el 'fill_parent' se renombró' match_parent' en API Nivel 8 y superior. – gfrigon

Respuesta

238

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

fill_parent (obsoleta y renombrado MATCH_PARENT en la API de nivel 8 y superior)

Definición de la presentación de un widget para fill_parent obligará a que se expanda para ocupar todo el espacio que está disponible dentro del elemento de diseño que es se ha colocado. Es más o menos equivalente a establecer el dockstyle de Windows Form Control en Fill.

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

wrap_content

Ajuste del tamaño de una vista a wrap_content obligará a que se expanda sólo lo suficiente para contener los valores (o controles secundarios) que contiene. Para los 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 propiedad Autosize de Windows Form Control en True.

Documentación en línea

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

+12

¿Qué sucede si el ancho de la imagen es mayor que el ancho de la pantalla y configuro el ancho de la vista de la imagen como fill_parent? ¿se comprimirá la imagen al tamaño de la pantalla? –

+0

@JohnWatson ¿encontró su respuesta? Tengo curiosidad también. – Rachael

+0

Es bueno saber las propiedades equivalentes de Windows Form Control que se mencionan. – Rempelos

51
  • FILL_PARENT (rebautizado MATCH_PARENT en API de nivel 8 y superior), lo que significa que el Vista quiere ser tan grande como su matriz (relleno menos)

  • WRAP_CONTENT, lo que significa que el Ver quiere ser lo suficientemente grande para encerrar su contenido (más de relleno)

+0

Relleno -> relleno + margen? – user1076637

8
  • fill_parent hará que el ancho o alto del elemento sea como grande como el elemento primario, en otras palabras, el contenedor.

  • wrap_content hará que el ancho o alto sea tan grande como sea necesario para que contenga los elementos que contiene.

Click here for ANDROID DOC Reference

+0

¿cuál será el contenedor? cómo rodear las vistas con diferentes contenedores? –

2

fill_parent:

diseño

Un componente está dispuesto para la fill_parent será obligatoria a expandirse para llenar los miembros de la unidad de diseño, tanto como sea posible en el espacio. Esto es coherente con la propiedad dockstyle del control de Windows. Un diseño o control de conjunto superior a fill_parent lo obligará a ocupar toda la pantalla.

wrap_content

configurar una vista del tamaño de wrap_content se verá obligado a la vista se expande para mostrar todo el contenido. Los controles TextView y ImageView, por ejemplo, se configuran en wrap_content y mostrarán todo su texto e imagen internos. Los elementos de diseño cambiarán el tamaño de acuerdo con el contenido. Configure una vista del tamaño del atributo Autosize wrap_content, aproximadamente equivalente a establecer un control de Windows para True.

Para más detalles favor vea este enlace: http://developer.android.com/reference/android/view/ViewGroup.LayoutParams.html

1

wrap_content establece el tamaño de una vista a la minimum required to contain the contents it displays.

match_parentexpands la vista to match the available space within the parent View, Fragment, or Activity.

27

fill_parent (obsoleto) = match_parent
El borde de la vista secundaria se expande para coincidir con el borde de la vista principal.

wrap_content
La frontera de la vista del niño envuelve cómodamente alrededor de su propio contenido.

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

enter image description here

Cada View (a TextView, un ImageView, un Button, etc.) tiene que establecer la width y la height de la vista. En el archivo de diseño xml, que podría tener este aspecto:

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

Además de establecer la anchura y la altura a match_parent o wrap_content, también se puede ajustar a un valor absoluto:

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

Generalmente es decir no tan bueno, sin embargo, porque no es tan flexible para dispositivos de diferentes tamaños. Después de haber entendido wrap_content y match_parent, lo siguiente que debe saber es layout_weight.

Ver también

XML para las imágenes anteriores

vertical LinearLayout

<?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> 

Horizontal LinearLayout

<?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 de esta respuesta supone que no hay margin or padding. Pero incluso si lo hay, el concepto básico sigue siendo el mismo. El borde/espaciado de vista simplemente se ajusta por el valor del margen o relleno.

Cuestiones relacionadas