Jaka jest różnica między fill_parent a wrap_content?

276

W Androidzie, kiedy układa się widżety, jaka jest różnica między fill_parent( match_parentna poziomie API 8 i wyższym) a wrap_content?

Czy jest jakaś dokumentacja, na którą możesz wskazać? Chciałbym to bardzo dobrze zrozumieć.

pupeno
źródło
33
Pamiętaj, że fill_parentzmieniono jego nazwę match_parentna API poziom 8 i wyższy.
gfrigon

Odpowiedzi:

266

Każdy z atrybutów można zastosować do rozmiaru poziomego lub pionowego widoku (kontrola wizualna). Służy do ustawiania rozmiaru widoku lub układu na podstawie jego zawartości lub rozmiaru jego układu nadrzędnego, zamiast jawnego określania wymiaru.

fill_parent(przestarzałe i przemianowane MATCH_PARENTna poziomie API 8 i wyższym)

Ustawienie układu widżetu na wartość fill_parent zmusi go do rozwinięcia, aby zajął tyle miejsca, ile jest dostępne w elemencie układu, w którym został umieszczony. Jest to w przybliżeniu odpowiednik ustawienia stylu dokowania kontrolki formularzy systemu Windows na Fill.

Ustawienie układu najwyższego poziomu lub kontrolki na fill_parent zmusi go do zajęcia całego ekranu.

wrap_content

Ustawienie rozmiaru Widoku na wartość wrap_content zmusi go do rozwinięcia się na tyle daleko, aby zawierał zawarte w nim wartości (lub kontrolki podrzędne). W przypadku elementów sterujących - takich jak pola tekstowe (TextView) lub obrazy (ImageView) - spowoduje to zawinięcie wyświetlanego tekstu lub obrazu. W przypadku elementów układu zmieni rozmiar układu, aby pasował do elementów sterujących / układów dodanych jako jego elementy potomne.

Jest to mniej więcej równowartość ustawienia Autosizewłaściwości Form Form Windows na True.

Dokumentacja online

Jest kilka szczegółów w Android dokumentacji kodu tutaj .

Reto Meier
źródło
12
co jeśli szerokość obrazu jest większa niż szerokość ekranu i ustawię szerokość widoku obrazu jako fill_parent. czy obraz zostanie skompresowany do rozmiaru ekranu?
John Watson,
@JohnWatson, czy znalazłeś odpowiedź? Też jestem ciekawa.
Rachael
Dobrze jest znać wymienione równoważne właściwości Windows Form Control.
Rempelos,
Co widziałeś @JohnWatson? Jaka jest twoja historia Jaka jest odpowiedź ?
Mam nadzieję, że będzie
36

fill_parent(przestarzałe) =match_parent
Ramka widoku potomnego rozwija się, aby dopasować się do granicy widoku rodzica.

wrap_content
Obramowanie widoku potomnego otacza się ściśle wokół własnej zawartości.

Oto kilka zdjęć, aby wyjaśnić wszystko. Zielone i czerwone są TextViews. Biel jest LinearLayoutprześwitująca.

wprowadź opis zdjęcia tutaj

Każdy View(a TextViewAn ImageView, A Button, itd.) Musi ustawić widthi heightzdania. W pliku układu xml może to wyglądać tak:

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

Oprócz ustawienia szerokości i wysokości na match_parentlub wrap_content, możesz również ustawić je na pewną wartość bezwzględną:

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

Zasadniczo nie jest to jednak tak dobre, ponieważ nie jest tak elastyczne dla urządzeń różnej wielkości. Po zrozumieniu wrap_contenti match_parentnastępnej rzeczy do nauczenia jest layout_weight.

Zobacz też

XML dla powyższych obrazów

Pionowy układ liniowy

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

Poziomy układ liniowy

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

Uwaga

Wyjaśnienie w tej odpowiedzi zakłada, że ​​nie ma marginesu ani wypełnienia . Ale nawet jeśli tak, podstawowa koncepcja jest nadal taka sama. Obramowanie / odstępy widoku są korygowane przez wartość marginesu lub wypełnienia.

Suragch
źródło
9
  • fill_parent sprawi, że szerokość lub wysokość elementu będzie tak duża, jak element macierzysty, innymi słowy, kontener.

  • wrap_content sprawi, że szerokość lub wysokość będzie tak duża, jak to konieczne, aby pomieścić zawarte w niej elementy.

Kliknij tutaj, aby zobaczyć ANDROID DOC Reference

Devrath
źródło
jaki będzie pojemnik? jak otaczać widoki różnymi pojemnikami?
Tejzeratul,
2

fill_parent :

Komponent ma ustawiony układ, fill_parentktóry będzie obowiązkowo rozwinąć, aby wypełnić elementy jednostki układu jak najwięcej w przestrzeni. Jest to zgodne z właściwością dockstyle kontrolki Windows. Najwyższy ustawiony układ lub fill_parentelement sterujący zmusi go do zajęcia całego ekranu.

wrap_content

Skonfiguruj widok wielkości wrap_contentbędzie zmuszony do wyświetlenia jest rozwinięty, aby pokazać całą zawartość. Na przykład formanty TextView i ImageView są ustawione na wrap_contentwyświetlanie całego wewnętrznego tekstu i obrazu. Elementy układu zmienią rozmiar zgodnie z zawartością. Skonfiguruj widok wielkości atrybutu Autosize w wrap_contentprzybliżeniu równoważny do ustawienia kontrolki Windows dla True.

Aby uzyskać szczegółowe informacje, sprawdź ten link: http://developer.android.com/reference/android/view/ViewGroup.LayoutParams.html

IntelliJ Amiya
źródło