287 votes

Quelle est la différence entre fill_parent et wrap_content ?

Dans Android, lors de la disposition des widgets, quelle est la différence entre fill_parent ( match_parent dans les API de niveau 8 et plus) et wrap_content ?

Existe-t-il une documentation vers laquelle vous pouvez vous diriger ? Je suis intéressé par une bonne compréhension.

34 votes

Notez que le fill_parent a été renommé match_parent dans les API de niveau 8 et plus.

267voto

Reto Meier Points 55904

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

fill_parent (déprécié et renommé MATCH_PARENT dans les API de niveau 8 et plus)

Le fait de définir la disposition d'un widget sur fill_parent l'obligera à s'étendre pour occuper tout l'espace disponible dans l'élément de disposition dans lequel il a été placé. C'est à peu près l'équivalent de régler le dockstyle d'un contrôle de formulaire Windows sur Fill .

Le fait d'attribuer la valeur fill_parent à une disposition ou à un contrôle de niveau supérieur l'obligera à occuper tout l'écran.

wrap_content

Le fait de définir la taille d'une vue sur wrap_content l'obligera à s'étendre suffisamment pour contenir les valeurs (ou les contrôles enfants) qu'elle contient. Pour les contrôles -- comme les boîtes 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 l'adapter aux contrôles / mises en page ajoutés en tant qu'enfants.

C'est à peu près l'équivalent d'un réglage de la valeur d'un contrôle de formulaire Windows. Autosize à True.

Documentation en ligne

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

13 votes

Que se passe-t-il si la largeur de l'image est plus grande que la largeur de l'écran et que je définis la largeur de l'image comme fill_parent ? L'image sera-t-elle compressée à la taille de l'écran ?

0 votes

@JohnWatson avez-vous trouvé votre réponse ? Je suis également curieux.

0 votes

Il est bon de connaître les propriétés équivalentes du contrôle de formulaire Windows qui sont mentionnées.

53voto

ganesh Points 281
  • FILL_PARENT (renommé MATCH_PARENT dans niveau 8 et supérieur de l'API), ce qui signifie que la vue doit être aussi grande que son parent (moins le rembourrage)

  • WRAP_CONTENT ce qui signifie que la vue doit être juste assez grande pour enfermer son contenu (plus le padding)

37voto

Suragch Points 197

fill_parent (déprécié) \= match_parent
La bordure de la vue enfant s'étend 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 un LinearLayout en montrant à travers.

enter image description here

Chaque View (a TextView , un ImageView , a Button etc.) doit définir le width y el height de 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 fixer la largeur et la hauteur à match_parent o wrap_content vous pouvez également les fixer à une valeur absolue :

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

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

Voir aussi

XML pour les images ci-dessus

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

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>

Note

L'explication dans cette réponse suppose qu'il n'y a pas de marge ou rembourrage . Mais même si c'est le cas, le concept de base est toujours le même. La bordure/l'espacement de l'affichage est simplement ajusté par la valeur de la marge ou du rembourrage.

10voto

Devrath Points 2552
  • fill_parent fera en sorte que la largeur ou la hauteur de l'élément soit aussi que l'élément parent, en d'autres termes, le conteneur.

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

Cliquez ici pour la référence Android DOC

0 votes

Quel sera le conteneur ? comment entourer les vues avec différents conteneurs ?

2voto

IntelliJ Amiya Points 672

fill_parent :

Un composant est mis en page pour le fill_parent Il sera obligatoire de s'étendre pour remplir les membres de l'unité d'aménagement, autant que possible dans l'espace. Cela est cohérent avec la propriété dockstyle du contrôle Windows. Une mise en page ou un contrôle supérieur à fill_parent l'obligera à occuper tout l'écran.

wrap_content

Mettre en place une vue de la taille de wrap_content sera obligé de voir est étendu pour montrer tout le contenu. Le site TextView et ImageView par exemple, est réglé sur wrap_content affichera l'intégralité de son texte interne et de son image. Les éléments de mise en page changeront de taille en fonction du contenu. Configurer un affichage de la taille de l'attribut Autosize wrap_content équivaut grossièrement à 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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X