web-dev-qa-db-fra.com

Quelle est la différence entre fill_parent et wrap_content?

Sous Android, lorsque vous organisez des widgets, quelle est la différence entre fill_parent (match_parent dans l'API de niveau 8 et supérieur) et wrap_content?

Existe-t-il une documentation à laquelle vous pouvez vous référer? Je suis intéressé à comprendre très bien.

268
pupeno

Chaque attribut peut être appliqué à la taille horizontale ou verticale de View (contrôle visuel). Il est utilisé pour définir une taille d'affichage ou de mises en forme en fonction de son contenu ou de la taille de la mise en page parent plutôt que de spécifier explicitement une dimension.

fill_parent (obsolète et renommé _MATCH_PARENT_ dans l'API de niveau 8 et supérieur)

Définir la présentation d'un widget sur fill_parent le forcera à se développer pour occuper tout l'espace disponible dans l'élément de présentation dans lequel il a été placé. Cela revient à peu près à définir le style de dock d'un contrôle de formulaire Windows sur Fill.

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

wrap_content

Définir la taille d'une vue sur wrap_content le forcera à se développer suffisamment pour contenir les valeurs (ou contrôles enfants) qu'elle contient. Pour les contrôles - comme les zones de texte (TextView) ou les images (ImageView) -, le texte ou l'image affichée sera enveloppée. Pour les éléments de présentation, il redimensionnera la présentation pour s’adapter aux contrôles/dispositions ajoutés en tant qu’enfants.

C'est à peu près l'équivalent de la définition de la propriété Autosize d'un contrôle Windows Form Control sur True.

Documentation en ligne

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

258
Reto Meier

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 enveloppe parfaitement son propre contenu.

Voici quelques images pour rendre les choses plus claires. Le vert et le rouge sont TextViews. Le blanc est un LinearLayout qui transparaît.

enter image description here

Chaque View (une TextView, une ImageView, une Button, etc.) doit définir la width et la 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"
_

Outre le réglage de la largeur et de la hauteur sur _match_parent_ ou _wrap_content_, vous pouvez également leur attribuer 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. Une fois que vous avez compris _wrap_content_ et _match_parent_, la prochaine chose à apprendre est _layout_weight_.

Voir également

XML pour les images ci-dessus

Linéaire linéaire

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

Remarque

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

33
Suragch
  • fill_parent rendra la largeur ou la hauteur de l'élément égale à celle de l'élément parent, autrement dit du conteneur.

  • wrap_content fera en sorte que la largeur ou la hauteur soit aussi grande que nécessaire pour contenir les éléments qui le composent.

Cliquez ici pour Android DOC Référence

9
Devrath

fill_parent:

Un composant dont la disposition est organisée pour le _fill_parent_ devra obligatoirement être développé pour remplir les membres de l’unité d’organisation, le plus possible dans l’espace. Cela est cohérent avec la propriété dockstyle du contrôle Windows. Une disposition ou une commande définie sur _fill_parent_ forcera à occuper tout l'écran.

wrap_content

Configurer une vue de la taille de _wrap_content_ sera forcé de voir est développé pour afficher tout le contenu. Les commandes TextView et ImageView , par exemple, sont définies sur _wrap_content_ affichera 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 Autosize _wrap_content_ à peu près équivalente à la définition d'un contrôle Windows sur True.

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

2
IntelliJ Amiya