Was ist der Unterschied zwischen fill_parent und wrap_content?

276

Was ist in Android beim Layout von Widgets der Unterschied zwischen fill_parent( match_parentin API Level 8 und höher) und wrap_content?

Gibt es eine Dokumentation, auf die Sie verweisen können? Ich bin daran interessiert, es sehr gut zu verstehen.

pupeno
quelle
33
Beachten Sie, dass die fill_parentUmbenennung match_parentin API Ebene 8 und höher.
Gfrigon

Antworten:

266

Jedes Attribut kann auf die horizontale oder vertikale Größe der Ansicht (visuelle Steuerung) angewendet werden. Es wird verwendet, um eine Ansichts- oder Layoutgröße basierend auf dem Inhalt oder der Größe des übergeordneten Layouts festzulegen, anstatt explizit eine Dimension anzugeben.

fill_parent(veraltet und MATCH_PARENTin API Level 8 und höher umbenannt)

Wenn Sie das Layout eines Widgets auf fill_parent setzen, wird es erweitert, um so viel Speicherplatz wie möglich innerhalb des Layoutelements zu belegen, in dem es platziert wurde. Dies entspricht in etwa dem Festlegen des Dockstils eines Windows Form-Steuerelements auf Fill.

Wenn Sie ein Layout oder Steuerelement der obersten Ebene auf fill_parent setzen, wird der gesamte Bildschirm eingenommen.

wrap_content

Wenn Sie die Größe einer Ansicht auf wrap_content festlegen, wird sie nur so weit erweitert, dass sie die darin enthaltenen Werte (oder untergeordneten Steuerelemente) enthält. Bei Steuerelementen wie Textfeldern (TextView) oder Bildern (ImageView) wird der angezeigte Text oder das umgebrochene Bild umgebrochen. Bei Layoutelementen wird die Größe des Layouts an die Steuerelemente / Layouts angepasst, die als untergeordnete Elemente hinzugefügt wurden.

Dies entspricht in etwa dem Festlegen der AutosizeEigenschaft eines Windows Form Control auf True.

Online-Dokumentation

Es gibt einige Details im Android Code - Dokumentation hier .

Reto Meier
quelle
12
Was ist, wenn die Bildbreite größer als die Bildschirmbreite ist und ich die Bildansichtsbreite als fill_parent festlege? Wird das Bild auf Bildschirmgröße komprimiert?
John Watson
@ JohnWatson hast du deine Antwort gefunden? Ich bin auch neugierig.
Rachael
Es ist gut, die entsprechenden Eigenschaften von Windows Form Control zu kennen, die erwähnt werden.
Rempelos
Was hast du bei JohnWatson gesehen? Was ist deine Geschichte ? Was ist die Antwort ?
Hoffentlich
36

fill_parent(veraltet) =match_parent
Der Rand der untergeordneten Ansicht wird erweitert und entspricht dem Rand der übergeordneten Ansicht.

wrap_content
Der Rand der untergeordneten Ansicht umschließt eng den eigenen Inhalt.

Hier sind einige Bilder, um die Dinge klarer zu machen. Das Grün und Rot sind TextViews. Das Weiß ist ein LinearLayoutDurchscheinen.

Geben Sie hier die Bildbeschreibung ein

Jeder View(a TextView, an ImageView, a Buttonusw.) muss das widthund das heightder Ansicht einstellen . In der XML-Layoutdatei könnte dies folgendermaßen aussehen:

android:layout_width="wrap_content"
android:layout_height="match_parent"

Neben der Einstellung von Breite und Höhe auf match_parentoder wrap_contentkönnen Sie auch einen absoluten Wert festlegen:

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

Im Allgemeinen ist dies jedoch nicht so gut, da es für Geräte unterschiedlicher Größe nicht so flexibel ist. Nachdem Sie verstanden haben , wrap_contentund match_parentist das nächste , was zu lernen layout_weight.

Siehe auch

XML für obige Bilder

Vertikales lineares Layout

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

Horizontales lineares Layout

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

Hinweis

Bei der Erklärung in dieser Antwort wird davon ausgegangen, dass kein Rand oder keine Polsterung vorhanden ist . Aber selbst wenn ja, ist das Grundkonzept immer noch dasselbe. Der Ansichtsrand / -abstand wird nur durch den Wert des Randes oder der Auffüllung angepasst.

Suragch
quelle
9
  • fill_parent Dadurch wird die Breite oder Höhe des Elements so groß wie das übergeordnete Element, dh der Container.

  • wrap_content Dadurch wird die Breite oder Höhe so groß wie erforderlich, um die darin enthaltenen Elemente aufzunehmen.

Klicken Sie hier für die ANDROID DOC-Referenz

Devrath
quelle
Was wird der Container sein? Wie kann man die Ansichten mit verschiedenen Containern umgeben?
Tejzeratul
2

fill_parent ::

Ein Komponentenlayout ist so angeordnet fill_parent, dass es erweitert werden muss, um die Elemente der Layouteinheit so weit wie möglich im Raum zu füllen. Dies stimmt mit der Dockstyle-Eigenschaft des Windows-Steuerelements überein. Ein Top-Set-Layout oder Steuerelement fill_parenterzwingt, dass es den gesamten Bildschirm einnimmt.

wrap_content

Das Einrichten einer Ansicht mit der Größe von wrap_contentwird zur Anzeige gezwungen und erweitert, um den gesamten Inhalt anzuzeigen. Mit den TextView- und ImageView- Steuerelementen wird beispielsweise wrap_contentder gesamte interne Text und das gesamte Bild angezeigt. Layoutelemente ändern die Größe je nach Inhalt. Richten Sie eine Ansicht der Größe des Autosize-Attributs ein, die in wrap_contentetwa dem Festlegen eines Windows-Steuerelements für True entspricht.

Weitere Informationen finden Sie unter folgendem Link: http://developer.android.com/reference/android/view/ViewGroup.LayoutParams.html

IntelliJ Amiya
quelle