Quelle est la différence entre match_parent et fill_parent?

Réponses:

1236

C'est la même chose (dans l'API niveau 8+). Utilisez match_parent.

FILL_PARENT (renommé MATCH_PARENT dans l'API niveau 8 et supérieur), ce qui signifie que la vue veut être aussi grande que son parent (moins le remplissage)

...

fill_parent: La vue doit être aussi grande que son parent (moins le remplissage). Cette constante est déconseillée à partir du niveau 8 de l'API et est remplacée par match_parent.

http://developer.android.com/reference/android/view/ViewGroup.LayoutParams.html

Matt Ball
la source
5
si j'écris une application pour 1.6 et 2.2, j'utiliserai fill_parent pour la compatibilité, est-ce vrai?
emeraldhieu
12
Il doit y avoir des différences non? Sinon, pourquoi Google l'a déconseillé et renommé le nouveau?
stuckedoverflow
49
@Halim Non, il n'y a pas de différence : les deux sont définis comme constants -1. Si vous vous sentez mieux à ce sujet, je n'ai pas non plus l'improvisation là-dedans ... :-)
arpy
2
@jlovison Non, il n'y a aucune différence. Les deux le sont -1. Vous obtenez l'erreur car l'ancienne plate-forme ne connaît pas le nouveau nom de la même constante.
Tapirboy
16
C'est tellement bizarre qu'Android Studio place toujours "fill_parent" dans toutes les mises en page créées par défaut! Je sais que ce sont les mêmes, mais je reviens à cette question de SO chaque année pour m'assurer que personne n'a découvert qu'il y a vraiment une différence. L'équipe Google / Android peut-elle modifier la valeur par défaut de "fill_parent" en "match_parent"? Merci d'avance! :)
swooby
246

Google a changé le nom pour éviter toute confusion.

Le problème avec l'ancien nom fill parentest qu'il implique qu'il affecte les dimensions du parent, alors qu'il match parentdécrit mieux le comportement résultant - faites correspondre la dimension avec le parent.

Les deux constantes se résolvent à -1la fin et entraînent donc le même comportement dans l'application. Ironiquement, ce changement de nom apporté pour clarifier les choses semble avoir ajouté de la confusion plutôt que de l'éliminer.

Tapirboy
la source
17
... sauf avec l'enfant de RelativeLayout avec width = match_parent et, disons, leftOf autre. Il ne correspond pas à la dimension de son parent, il remplit ce qui reste en lui. Cela ne sert qu'à CAUSER la confusion.
kaay
7
Comme FILL_PARENT et MATCH_PARENT signifie que la vue veut être aussi grande que son parent, moins le rembourrage du parent n'est-ce pas l'espace intérieur plutôt que les dimensions extérieures? Maintenant, je suis encore plus confus!
Caltor le
@bnieland J'ai supprimé les références aux dimensions intérieures et extérieures car elles ne sont pas conformes à la documentation google sur developer.android.com/reference/android/view/… bien que je puisse voir une citation similaire (non corroborée ) sur sevennet.org / 2014/11/22 /… qui est d'où vous pourriez avoir obtenu vos informations.
Caltor
28

Fonctionnellement, aucune différence, Google vient de changer le nom de fill_parent en match_parent, à partir du niveau d'API 8 (Android 2.2). FILL_PARENT est toujours disponible pour des raisons de compatibilité.

LayoutParams.FILL_PARENTet les LayoutParams.MATCH_PARENTdeux ont la valeur -1. Je ne sais pas ce qui a tenté Google de passer de Fill Parent à Match Parent :)

Étant donné que la plupart des phones are >= Android 2.2.. vous devez utiliser Match Parent pour une compatibilité future ... vous ne savez pas quand ils arrêteront l'ancienne constante Fill Parent!

Umair
la source
11

Pour des raisons de compatibilité, il est préférable de s'en tenir à fill_parent, c'est-à-dire lors de la prise en charge des périphériques API 8 ci-dessous. Mais si votre application cible l'API 8 et les versions ultérieures, vous devez utiliser match_parent à la place.

Olumide Oyetoke
la source
8
Seulement rétrocompatibilité cependant. Si FILL_PARENTest déconseillé (comme mentionné par Matt Ball ci-dessus), alors la seule option pour la compatibilité directe est MATCH_PARENT.
2
D'accord, mais si vous avez l'intention d'écrire du code pour les appareils de niveau API inférieur, par exemple: 2.3,2.2,2.1 pour le moment, vous devez utiliser FILL_PARENT. J'ai eu quelques problèmes avec match_parent pour les anciennes versions.
MSA
il est temps de supprimer cette réponse. Ce n'est plus pertinent et peut donner de mauvais conseils aux nouveaux développeurs
Tim
8

FILL_PARENTest obsolète dans l'API niveau 8 et MATCH_PARENTutilise l' API de niveau supérieur

Avanish Kumar
la source
8

match_parent est utilisé à la place de fill_parent et le définit pour aller aussi loin que le parent. Utilisez simplement match_parent et oubliez fill_parent . J'ai complètement abandonné fill_parent et tout est parfait comme d'habitude.

Vérifiez ici pour en savoir plus.

Koech
la source
6

Juste pour lui donner un nom plus proche de son action réelle . "fill_parent"ne remplit pas l'espace restant comme son nom l'indique (pour cela, vous utilisez l'attribut weight). Au lieu de cela, il prend autant d'espace que son parent de disposition. Voilà pourquoi le nouveau nom est"match_parent"

Jawad Zeb
la source
2
Je ne comprends pas la logique des gens quand ils le disent. Le parent a un rembourrage. Ou l'enfant est laissé d'un autre. L'enfant correspond-il? Non. Remplit-il l'espace restant? Ici, dans ce qui est apparemment Bizzarro World, nous répondons: oui.
kaay
1
@kaay Je suis totalement d'accord que le nouveau nom est pire que l'ancien. Mais ce que dit Google va.
Caltor
6

Les deux ont des fonctionnalités similaires, seule la différence est que fill_parent est utilisé jusqu'au niveau d'API 8 et match_parent est utilisé après le niveau d'API 8 ou un niveau supérieur.

Praveen Gaur
la source
6

Lorsque vous définissez la mise en page widthet height comme match_parentdans la XMLpropriété, il occupera toute la surface que la vue parent a, par exemple , il sera aussi grand que le parent.

<LinearLayout
    android:layout_width="300dp"
    android:layout_height="300dp"
    android:background="#f9b0b0">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#b0f9dc"/>

</LinearLayout>

Le parent de lièvre est rouge et l'enfant est vert. L'enfant occupe toute la zone. Parce que c'est widthet height c'est match_parent.

entrez la description de l'image ici

Remarque: Si un parent est appliqué un remplissage, cet espace ne serait pas inclus.

<LinearLayout
    android:layout_width="300dp"
    android:layout_height="300dp"
    android:background="#f9b0b0"
    android:paddingTop="20dp"
    android:paddingBottom="10dp">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#b0f9dc"/>

</LinearLayout>

entrez la description de l'image ici

Donc TextView hight = 300dp (hauteur parent) - (20 (paddingTop) +10 (paddingBottom)) = (300 - 30) dp = 270 dp

fill_parent Vs match_parent

fill_parent est le nom précédent de match_parent

Pour API niveau 8 et supérieur fill_parent renommée match_parentet fill_parentobsolète maintenant.

Alors fill_parentet match_parentsont les mêmes.

Documentation API pour fill_parent

La vue doit être aussi grande que son parent (moins le remplissage). Cette constante est obsolète à partir du niveau 8 de l'API et est remplacée par {@code match_parent}.


la source
4

match_parent, ce qui signifie que la vue veut être aussi grande que son parent (moins le remplissage).

wrap_content, ce qui signifie que la vue veut être juste assez grande pour contenir son contenu (plus le remplissage)

Pour une meilleure illustration, j'ai créé un exemple de mise en page qui illustre ce concept. Pour voir son effet, j'ai ajouté une bordure de chaque contenu textView.

Dans le contenu textView "Match parent", nous pouvons voir sa largeur de mise en page étalée sur toute sa longueur parent.

Mais nous pouvons voir dans "Wrap Content" textView content, sa largeur de mise en page enveloppée dans sa longueur de contenu (Wrap Content).

Disposition Android

Subarata Talukder
la source
4

match_parent et fill_parent sont la même propriété, utilisée pour définir la largeur ou la hauteur d'une vue en plein écran horizontalement ou verticalement.

Ces propriétés sont utilisées dans des fichiers xml Android comme celui-ci.

 android:layout_width="match_parent"
 android:layout_height="fill_parent"

ou

 android:layout_width="fill_parent"
 android:layout_height="match_parent"

fill_parentétait utilisé dans les versions précédentes, mais il est désormais obsolète et remplacé par match_parent. J'espère que ça vous aidera.

Mansuu ....
la source
3

fill_parent: la vue doit être aussi grande que son parent.

maintenant ce contenu fill_parent est obsolète et remplacé par match_parent.

Nikita Prajapati
la source
3

Pour moi, remplir le parent et faire correspondre le parent remplit la même fonction que:

parent de remplissage : a été utilisé avant l'API 8

match parent Ceci a été utilisé à partir de l'API 8+ Fonction des deux Remplit la vue parent à côté du rembourrage

Xcode
la source
2

FILL_PARENT a été renommé MATCH_PARENT dans l'API de niveau 8 et supérieur, ce qui signifie que la vue veut être aussi grande que son parent (moins le remplissage) - Google

Sarvesh Thiruppathi
la source
2

FILL_PARENT est obsolète à partir de l'API de niveau 8 et supérieur et il est renommé pour les versions supérieures en MATCH_PARENT

Les deux sont identiques FILL_PARENTet MATCH_PARENT, a FILL_PARENTété utilisé dans la version inférieure inférieure au niveau API 8 et MATCH_PATENT sont utilisés dans le niveau API supérieur supérieur à 8.

FILL_PARENT(renommé MATCH_PARENTdans l'API niveau 8 et supérieur), ce qui signifie que la vue veut être aussi grande que son parent (remplissage moins)

fill_parent: La vue doit être aussi grande que son parent (moins le remplissage). Cette constante est déconseillée à partir du niveau 8 de l'API et est remplacée par match_parent.

Pour plus de détails, visitez cette page

Utkarsh Srivastava
la source
0

1. match_parent

Lorsque vous définissez la largeur et la hauteur de la disposition sur match_parent, il occupera la zone complète de la vue parent, c'est-à-dire qu'il sera aussi grand que le parent.

Remarque : Si un parent est appliqué un remplissage, cet espace ne serait pas inclus.

Lorsque nous créons un layout.xml par défaut, nous avons RelativeLayout comme vue parent par défaut avec android: layout_width = "match_parent" et android: layout_height = "match_parent", c'est-à-dire qu'il occupe la largeur et la hauteur complètes de l'écran mobile.

Notez également que le rembourrage est appliqué sur tous les côtés,

android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"

Permet maintenant d'ajouter une sous-vue LinearLayout et définit ses layout_width = "match_parent" et layout_height = "match_parent", la vue graphique afficherait quelque chose comme ceci,

match_parent_example

Code

xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.code2care.android.togglebuttonexample.MainActivity" >

android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_marginLeft="11dp"
android:background="#FFFFEE"
android:orientation="vertical" >

2. fill_parent:

C'est la même chose que match_parent, fill_parent a été déprécié dans l'API niveau 8. Donc, si vous utilisez l'API niveau 8 ou supérieur, vous devez éviter d'utiliser fill_parent

Permet de suivre les mêmes étapes que nous avons fait pour match_parent, utilisez plutôt fill_parent à la place.

Vous verriez qu'il n'y a aucune différence de comportement entre fill_parent et match parent.

hossam scott
la source