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