Quelle est la différence entre fill_parent et wrap_content?

276

Sous Android, lors de la mise en page des widgets, quelle est la différence entre fill_parent( match_parentdans l'API niveau 8 et supérieur) et wrap_content?

Y a-t-il une documentation sur laquelle vous pouvez pointer? Je souhaite très bien le comprendre.

pupeno
la source
33
Notez que le a fill_parentété renommé match_parenten API niveau 8 et supérieur.
gfrigon

Réponses:

266

L'un ou l'autre des attributs peut être appliqué à la taille horizontale ou verticale de View (contrôle visuel). Il est utilisé pour définir une taille de vue ou de disposition en fonction de son contenu ou de la taille de sa disposition parent plutôt que de spécifier explicitement une dimension.

fill_parent(obsolète et renommé MATCH_PARENTen API niveau 8 et supérieur)

Définir la disposition d'un widget sur fill_parent le forcera à s'étendre pour occuper autant d'espace que disponible dans l'élément de disposition dans lequel il a été placé. C'est à peu près l'équivalent de définir le style d'ancrage d'un contrôle de formulaire Windows sur Fill.

La définition d'une disposition ou d'un contrôle de niveau supérieur sur fill_parent l'obligera à occuper tout l'écran.

wrap_content

La définition de la taille d'une vue sur wrap_content la forcera à s'étendre suffisamment loin pour contenir les valeurs (ou les contrôles enfants) qu'elle contient. Pour les contrôles - comme les zones de texte (TextView) ou les images (ImageView) - cela enveloppera le texte ou l'image affichée. Pour les éléments de mise en page, il redimensionnera la mise en page pour s'adapter aux contrôles / mises en page ajoutés en tant qu'enfants.

C'est à peu près l'équivalent de définir la Autosizepropriété True d' un contrôle de formulaire Windows .

Documentation en ligne

Il y a quelques détails dans la documentation du code Android ici .

Reto Meier
la source
12
que se passe-t-il si la largeur de l'image est supérieure à la largeur de l'écran et que je définit la largeur de la vue d'image comme fill_parent l'image sera-t-elle compressée à la taille de l'écran?
John Watson
@JohnWatson avez-vous trouvé votre réponse? Je suis curieux aussi.
Rachael
Il est bon de connaître les propriétés équivalentes de Windows Form Control qui sont mentionnées.
Rempelos
Qu'avez-vous vu @JohnWatson? Quelle est ton histoire? Quelle est la réponse ?
Espérons que
36

fill_parent(obsolète) =match_parent
La bordure de la vue enfant se développe pour correspondre à la bordure de la vue parent.

wrap_content
La bordure de la vue enfant s'enroule parfaitement autour de son propre contenu.

Voici quelques images pour rendre les choses plus claires. Le vert et le rouge sont TextViews. Le blanc est LinearLayoutvisible.

entrez la description de l'image ici

Chaque View(a TextView, an ImageView, a Button, etc.) doit définir le widthet le heightde la vue. Dans le fichier de mise en page XML, cela pourrait ressembler à ceci:

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

En plus de définir la largeur et la hauteur sur match_parentou wrap_content, vous pouvez également les définir sur une valeur absolue:

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

En général, ce n'est pas aussi bon, car il n'est pas aussi flexible pour des appareils de tailles différentes. Après avoir compris wrap_contentet match_parent, la prochaine chose à apprendre est layout_weight.

Voir également

XML pour les images ci-dessus

Disposition linéaire verticale

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

Disposition linéaire horizontale

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

Remarque

L'explication de cette réponse suppose qu'il n'y a pas de marge ou de remplissage . Mais même s'il y en a, le concept de base est toujours le même. La bordure / l'espacement de la vue est juste ajusté par la valeur de la marge ou du remplissage.

Suragch
la source
9
  • fill_parent rendra la largeur ou la hauteur de l'élément aussi grande que l'élément parent, en d'autres termes, le conteneur.

  • wrap_content rendra la largeur ou la hauteur aussi grande que nécessaire pour contenir les éléments qui s'y trouvent.

Cliquez ici pour la référence DOC ANDROID

Devrath
la source
quel sera le conteneur? comment entourer les vues de différents conteneurs?
Tejzeratul
2

fill_parent :

Un composant est agencé pour que la disposition fill_parentsoit obligatoire à développer pour remplir les membres de l'unité d'agencement, autant que possible dans l'espace. Cela est cohérent avec la propriété dockstyle du contrôle Windows. Une disposition ou un contrôle supérieur fill_parentle forcera à occuper tout l'écran.

wrap_content

Configurer une vue de la taille de wrap_contentsera forcé à afficher est développé pour afficher tout le contenu. Les contrôles TextView et ImageView , par exemple, sont définis pour wrap_contentafficher l'intégralité de son texte et de son image internes. Les éléments de mise en page changeront la taille en fonction du contenu. Configurez une vue de la taille de l'attribut Taille automatique à wrap_contentpeu près équivalente pour définir un contrôle Windows pour True.

Pour plus de détails, veuillez consulter ce lien: http://developer.android.com/reference/android/view/ViewGroup.LayoutParams.html

IntelliJ Amiya
la source