Was ist der Unterschied zwischen match_parent und fill_parent?

Antworten:

1235

Sie sind dasselbe (in API Level 8+). Verwenden Sie match_parent.

FILL_PARENT (in API Level 8 und höher in MATCH_PARENT umbenannt) bedeutet, dass die Ansicht so groß wie die übergeordnete Ansicht sein soll (minus Auffüllen).

...

fill_parent: Die Ansicht sollte so groß wie die übergeordnete Ansicht sein (minus Auffüllung). Diese Konstante ist ab API-Ebene 8 veraltet und wird durch ersetzt match_parent.

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

Matt Ball
quelle
5
Wenn ich eine App für 1.6 und 2.2 schreibe, verwende ich aus Kompatibilitätsgründen fill_parent. Ist das richtig?
Smaragdhieu
12
Es muss einige Unterschiede geben, oder? Warum hat Google es sonst abgelehnt und das neue umbenannt?
Stuckedoverflow
49
@Halim Nein, es gibt keinen Unterschied : Beide sind als konstant definiert -1. Wenn du dich besser fühlst, verstehe ich das auch nicht ... :-)
Arpy
2
@jlovison Nein, es gibt keine Unterschiede. Beides ist -1. Sie erhalten den Fehler, weil die ältere Plattform den neuen Namen derselben Konstante nicht kennt.
Tapirboy
16
Es ist so seltsam, dass Android Studio immer noch "fill_parent" in alle von Standardvorlagen erstellten Layouts einfügt! Ich weiß, dass sie gleich sind, aber ich komme jedes Jahr auf diese SO-Frage zurück, um sicherzustellen, dass niemand entdeckt hat, dass es wirklich einen Unterschied gibt. Kann das Google / Android-Team bitte den Standardwert von "fill_parent" in "match_parent" ändern? Danke im Voraus! :)
swooby
246

Google hat den Namen geändert, um Verwirrung zu vermeiden.

Das Problem mit dem alten Namen fill parentbestand darin, dass er die Dimensionen des übergeordneten Elements beeinflusst, während match parentdas resultierende Verhalten besser beschrieben wird - passen Sie die Dimension an das übergeordnete Element an.

Beide Konstanten werden -1am Ende aufgelöst und führen so zu einem identischen Verhalten in der App. Ironischerweise scheint diese Namensänderung, die vorgenommen wurde, um die Dinge zu klären, eher Verwirrung zu stiften, als sie zu beseitigen.

Tapirboy
quelle
17
... außer bei RelativeLayouts Kind mit width = match_parent und zum Beispiel leftOf eines anderen. Es entspricht nicht der Dimension seiner Eltern, es füllt das, was darin verbleibt. Das dient nur dazu, Verwirrung zu stiften.
Kaay
7
Da FILL_PARENT und MATCH_PARENT bedeuten, dass die Ansicht so groß sein soll wie das übergeordnete Element, abzüglich der Polsterung des übergeordneten Elements, ist dies nicht eher der Innenraum als die äußeren Abmessungen? Jetzt bin ich noch verwirrter!
Caltor
@bnieland Ich habe die Verweise auf innere und äußere Dimensionen entfernt, da sie nicht mit der Google-Dokumentation unter developer.android.com/reference/android/view/… übereinstimmen , obwohl ich auf sevennet.org ein ähnliches (unbegründetes) Zitat sehen kann / 2014/11/22 /… von wo Sie möglicherweise Ihre Informationen erhalten haben.
Caltor
28

Funktionell kein Unterschied, Google hat nur den Namen von fill_parent in match_parent von API Level 8 (Android 2.2) geändert. FILL_PARENT ist aus Kompatibilitätsgründen weiterhin verfügbar.

LayoutParams.FILL_PARENTund LayoutParams.MATCH_PARENTbeide haben den Wert -1. Ich bin mir nicht sicher, was Google dazu verleitet hat, von Fill Parent zu Match Parent zu wechseln :)

Da die meisten phones are >= Android 2.2.. Sie sollten Match Parent für zukünftige Kompatibilität verwenden ... nicht sicher, wann sie die ältere Fill Parent-Konstante beenden werden!

Umair
quelle
11

Aus Kompatibilitätsgründen ist es besser, sich an fill_parent zu halten, dh wenn Geräte unter API 8 unterstützt werden. Wenn Ihre App jedoch auf API 8 und höher abzielt, sollten Sie stattdessen match_parent verwenden.

Olumid Oyetoke
quelle
8
Nur Abwärtskompatibilität. Wenn FILL_PARENTes veraltet ist (wie oben von Matt Ball erwähnt), ist die einzige Option für die Vorwärtskompatibilität MATCH_PARENT.
2
Stimmen Sie zu, aber wenn Sie vorhaben, Code für Geräte mit niedrigerer API-Ebene zu schreiben, z. B.: 2.3.2.2.2.1.1, müssen Sie FILL_PARENT verwenden. Ich hatte einige Probleme mit match_parent für ältere Versionen.
MSA
Es ist Zeit, diese Antwort zu löschen. Es ist nicht mehr relevant und kann neuen Entwicklern den falschen Rat geben
Tim
8

FILL_PARENTist in API-Level 8 veraltet und MATCH_PARENTverwendet API auf höherer Ebene

Avanish Kumar
quelle
8

match_parent wird anstelle von fill_parent verwendet und legt fest, dass es so weit wie möglich zum übergeordneten Element geht. Verwenden Sie einfach match_parent und vergessen Sie fill_parent . Ich habe fill_parent komplett über Bord geworfen und alles ist wie immer perfekt.

Überprüfen Sie hier für mehr.

Koech
quelle
6

Nur um ihm einen Namen zu geben, der seiner tatsächlichen Handlung näher kommt . "fill_parent"füllt den verbleibenden Platz nicht aus, wie der Name andeutet (dafür verwenden Sie das Attribut weight). Stattdessen nimmt es so viel Platz ein wie sein übergeordnetes Layout. Deshalb lautet der neue Name"match_parent"

Jawad Zeb
quelle
2
Ich verstehe die Logik der Menschen nicht, wenn sie dies sagen. Elternteil hat Polsterung. Oder das Kind bleibt von einem anderen übrig. Passt das Kind dazu? Füllt es den verbleibenden Raum aus? Hier in der scheinbar Bizzarro-Welt antworten wir: Ja.
Kaay
1
@kaay Ich stimme vollkommen zu, dass der neue Name schlechter ist als der alte. Aber was Google sagt, geht.
Caltor
6

Beide haben ähnliche Funktionen. Der einzige Unterschied besteht darin, dass fill_parent bis API-Ebene 8 und match_parent nach API-Ebene 8 oder höher verwendet wird.

Praveen Gaur
quelle
6

Wenn Sie das Layout festlegen widthund height wie match_parentin der XMLEigenschaft festlegen , wird der gesamte Bereich der übergeordneten Ansicht belegt, dh er ist so groß wie die übergeordnete Ansicht.

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

Hasenelternteil ist rot und Kind ist grün. Kind besetzen alle Bereiche. Weil es ist widthund height ist match_parent.

Geben Sie hier die Bildbeschreibung ein

Hinweis: Wenn dem übergeordneten Element eine Auffüllung zugewiesen wird, wird dieses Leerzeichen nicht berücksichtigt.

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

Geben Sie hier die Bildbeschreibung ein

TextView-Höhe = 300 dp (übergeordnete Höhe) - (20 (paddingTop) +10 (paddingBottom)) = (300 - 30) dp = 270 dp

fill_parent Vs match_parent

fill_parent ist der vorherige Name von match_parent

Für API Level 8 und höher fill_parentumbenannt in match_parentund fill_parentist jetzt veraltet.

Also fill_parentund match_parentsind gleich.

API-Dokumentation für fill_parent

Die Ansicht sollte so groß wie die übergeordnete Ansicht sein (minus Auffüllung). Diese Konstante ist ab API-Ebene 8 veraltet und wird durch {@code match_parent} ersetzt.


quelle
4

match_parent, was bedeutet, dass die Ansicht so groß wie die übergeordnete Ansicht sein soll (minus Auffüllen).

wrap_content, was bedeutet, dass die Ansicht gerade groß genug sein soll, um ihren Inhalt einzuschließen (plus Auffüllen)

Zur besseren Veranschaulichung habe ich ein Beispiellayout erstellt, das dieses Konzept demonstriert. Um die Wirkung zu sehen, habe ich jedem textView-Inhalt einen Rahmen hinzugefügt.

Im TextView-Inhalt "Übergeordnetes Element abgleichen" können wir sehen, dass die Layoutbreite über die gesamte Länge des übergeordneten Elements verteilt ist.

Aber wir können in "Wrap Content" textView-Inhalt sehen, dass die Layoutbreite in die Länge des Inhalts (Wrap Content) eingewickelt ist.

Android Layout

Subarata Talukder
quelle
4

match_parent und fill_parent sind dieselbe Eigenschaft, mit der die Breite oder Höhe einer Ansicht im Vollbildmodus horizontal oder vertikal definiert wird.

Diese Eigenschaften werden in solchen Android-XML-Dateien verwendet.

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

oder

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

fill_parentwurde in früheren Versionen verwendet, aber jetzt ist es veraltet und ersetzt durch match_parent. Ich hoffe es wird dir helfen.

Mansuu ....
quelle
3

fill_parent: Die Ansicht sollte so groß sein wie die übergeordnete.

Jetzt ist dieser Inhalt fill_parent veraltet und wird durch match_parent ersetzt.

Nikita Prajapati
quelle
3

Für mich erfüllt das Ausfüllen von Eltern und Übereinstimmen von Eltern nur die gleiche Funktion:

Elternteil füllen : Wurde vor API 8 verwendet

match parent Dies wurde von API 8+ verwendet. Funktion von beiden Füllt die übergeordnete Ansicht neben dem Auffüllen

Xcode
quelle
2

FILL_PARENT wurde in API Level 8 und höher in MATCH_PARENT umbenannt. Dies bedeutet, dass die Ansicht so groß sein soll wie die übergeordnete Ansicht (ohne Auffüllung) - Google

Sarvesh Thiruppathi
quelle
2

FILL_PARENT ist ab API-Level 8 und höher veraltet und wird für die oberen Versionen in umbenannt MATCH_PARENT

Beide sind gleich FILL_PARENTund MATCH_PARENTwurden FILL_PARENTin der niedrigeren Version weniger als API-Stufe 8 verwendet, und MATCH_PATENT werden in höheren API-Stufen größer als 8 verwendet.

FILL_PARENT( MATCH_PARENTin API Level 8 und höher umbenannt), was bedeutet, dass die Ansicht so groß sein soll wie ihre übergeordnete Ansicht (minus Auffüllen)

fill_parent: Die Ansicht sollte so groß wie die übergeordnete Ansicht sein (minus Auffüllung). Diese Konstante ist ab API-Ebene 8 veraltet und wird durch ersetzt match_parent.

Für weitere Informationen besuchen Sie bitte diese Seite

Utkarsh Srivastava
quelle
0

1. match_parent

Wenn Sie die Breite und Höhe des Layouts als match_parent festlegen, wird der gesamte Bereich der übergeordneten Ansicht belegt, dh er ist so groß wie die übergeordnete Ansicht.

Hinweis : Wenn dem übergeordneten Element eine Auffüllung zugewiesen wird, wird dieses Leerzeichen nicht berücksichtigt.

Wenn wir standardmäßig eine layout.xml erstellen, haben wir RelativeLayout als übergeordnete Standardansicht mit android: layout_width = "match_parent" und android: layout_height = "match_parent", dh es nimmt die gesamte Breite und Höhe des mobilen Bildschirms ein.

Beachten Sie auch, dass die Polsterung an allen Seiten angebracht ist.

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

Fügen Sie nun eine Unteransicht LinearLayout hinzu und legen Sie deren layout_width = "match_parent" und layout_height = "match_parent" fest. In der grafischen Ansicht wird etwa Folgendes angezeigt:

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:

Dies ist dasselbe wie match_parent, fill_parent wurde in API-Ebene 8 abgeschrieben. Wenn Sie also API-Ebene 8 oder höher verwenden, müssen Sie die Verwendung von fill_parent vermeiden

Befolgen wir die gleichen Schritte wie für match_parent, verwenden Sie stattdessen überall fill_parent.

Sie werden sehen, dass es keinen Unterschied im Verhalten sowohl bei fill_parent als auch bei match parent gibt.

Hossam Scott
quelle