Jaka jest różnica między match parent a fill parent?

Jestem trochę zdezorientowany co do dwóch właściwości XML: match_parent i fill_parent. Wydaje się, że oba są takie same. Czy jest między nimi jakaś różnica?

Author: Adam Stelmaszczyk, 2011-04-23

17 answers

To to samo (na poziomie API 8+). Użyj match_parent.

FILL_PARENT (zmienił nazwę na MATCH_PARENT w API na poziomie 8 i wyższym), co oznacza, że widok chce być tak duży jak jego rodzic (minus wypełnienie)

...

fill_parent: widok powinien być tak duży jak jego rodzic (minus wypełnienie). Stała ta jest przestarzała począwszy od poziomu API 8 i jest zastępowana przez match_parent.

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

 1172
Author: Matt Ball,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-04-23 03:33:49

Google zmieniło nazwę, aby uniknąć nieporozumień.

Problem ze starą nazwą fill parent polegał na tym, że implikuje ona wpływanie na wymiary rodzica, podczas gdy match parent lepiej opisuje wynikowe zachowanie - dopasuj wymiar do rodzica.

Obie stałe rozwiązują się na końcu do -1, co skutkuje identycznym zachowaniem w aplikacji. Jak na ironię, ta zmiana nazwy dokonana w celu wyjaśnienia rzeczy wydaje się dodawać zamieszanie, a nie eliminować go.

 231
Author: Tapirboy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-01-30 09:30:08

Funkcjonalnie bez różnicy, Google właśnie zmienił nazwę z fill_parent na match_parent, z poziomu API 8 (Android 2.2). FILL_PARENT jest nadal dostępny ze względu na kompatybilność.

LayoutParams.FILL_PARENT i LayoutParams.MATCH_PARENT oba mają wartość -1. Nie wiem co skusiło google do zmiany z Fill Parent na Match Parent :)

Od większości phones are >= Android 2.2 .. dla przyszłej zgodności należy użyć Match Parent... nie jestem pewien, kiedy przestaną stosować starszą stałą rodzica Fill!

 24
Author: Umair,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-09-20 07:25:40

Ze względu na kompatybilność lepiej trzymać się fill_parent, tzn. gdy obsługujemy poniżej API 8 urządzeń. Ale jeśli Twoja aplikacja ma API 8 i wyższe, powinieneś użyć match_parent zamiast tego.

 11
Author: Olumide Oyetoke,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-08-07 11:23:06

fill_parent (zmiana nazwy MATCH_PARENT na poziomie API8 i wyżej), co oznacza, że widok chce być tak duży jak jego rodzic (minus padding)

fill_parent: widok powinien być tak duży jak jego rodzic (minus wypełnienie). Ta stała jest przestarzała, począwszy od poziomu API 8 i zastępuje się przez match_parent

Dla Android API 1.6 na 2.1 match_parent spowoduje błąd, więc użyj fill_parent w takich przypadkach. Aby wspierać kompatybilność wsteczną, lepiej jest użyć fill_parent

  • obie są statycznymi stałymi końcowymi, które reprezentują wartość -1
  • FILL_PARENT jest przestarzały na poziomie API 8

Więc MATCH_PARENT i FILL_PARENT są takie same?

Tak, MATCH_PARENT i FILL_PARENT są po prostu różnymi stałymi nazwami dla tej samej wartości całkowitej (-1 jeśli jesteś ciekawy) używanymi do określenia trybu układu widoku w jego rodzicu.

Dlaczego dodano MATCH_PARENT?

Pamiętam, że Roman Guy (Android Developer w Google) powiedział, że zmienili nazwę, ponieważ "fill_parent " było mylące dla programistów. W rzeczywistości, "fill_parent " nie wypełnia pozostałej przestrzeni (do tego używasz atrybutu weight), ale zajmuje tyle miejsca, co jego układ macierzysty. Dlatego nowa nazwa brzmi "match_parent"

 11
Author: Kartheek,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-23 07:19:10

MATCH_PARENT i FILL_PARENT są takie same?

Tak, MATCH_PARENT i FILL_PARENT są po prostu różnymi stałymi nazwami dla tej samej wartości całkowitej (-1 jeśli jesteś ciekawy) używanymi do określenia trybu układu widoku w jego rodzicu.

Dlaczego więc Dodano MATCH_PARENT?

Zespół Android odkrył, że programiści błędnie interpretowali FILL_PARENT, aby oznaczać, że View wypełni pozostałą przestrzeń w rodzicu. W rzeczywistości, poprzez podanie FILL_PARENT, View jest tak duże, jak jego rodzic.

Rozumiem, jak działa. Jakie to ma znaczenie, jeśli używam jednego lub drugiego?

FILL_PARENT jest przestarzały. Bycie deprecated nie czyni z niego diabła, ale w końcu odejdzie. Twoja aplikacja jest bardziej przyszłościowa przy użyciu MATCH_PARENT. Po co używać przestarzałej opcji, gdy bieżąca opcja zachowuje się dokładnie tak samo?

Ponadto, {[2] } jest rzeczywiście mylące. Osobiście widziałem ludzi zdezorientowanych, bo to nie działa tak, jak myśleli would. W rzeczywistości widziałem pojedynczy znacznik używający zarówno FILL_PARENT, jak i MATCH_PARENT, ponieważ deweloper pomyślał (co zrozumiałe), że są to dwa różne tryby układu.

JAK MOŻESZ SIĘ POTKNĄĆ PRÓBUJĄC FILL_PARENT?

Oto szybki przykład tego, jak zamieszanie może prowadzić do wielokrotnego nakładania głowy na biurka. Po pierwsze, weź bardzo prosty układ zawierający kilka instancji View.
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <View
        android:layout_width="match_parent"
        android:layout_height="100dp"
        android:background="#FFFF00" />
    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:background="@android:color/black"
        android:text="@string/hello_world"
        android:padding="50dp" />
    <View
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#FF0000" />

</LinearLayout>
 7
Author: Ravi Vaghela,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-31 09:49:57

FILL_PARENT jest przestarzały w API na poziomie 8 i MATCH_PARENTużywa API wyższego poziomu

 6
Author: Avanish Kumar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-24 06:56:30

Match_parent jest używany zamiast fill_parent i ustawia go tak daleko, jak idzie rodzic. Wystarczy użyć match_parent i zapomnieć o fill_parent. Całkowicie porzuciłem fill_parent i wszystko jest idealne jak zwykle.

Sprawdź tutaj aby uzyskać więcej.

 6
Author: Koech,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-01 08:53:43

Żeby nadać jej nazwę bliżej rzeczywistej akcji . "fill_parent" nie wypełnia pozostałej przestrzeni, jak sugeruje nazwa (w tym celu używasz atrybutu weight). Zamiast tego zajmuje tyle miejsca, co jego układ macierzysty. Dlatego nowa nazwa to "match_parent"

 5
Author: Xar E Ahmer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-12-16 07:16:08

Oba mają podobną funkcjonalność tylko różnica polega na tym, że fill_parent jest używany do poziomu API 8, a match_parent jest używany po poziomie API 8 lub wyższym.

 4
Author: Praveen Gaur,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-22 08:06:00

Kiedy ustawisz layout width i height jako match_parent we właściwości XML, będzie on zajmował cały obszar, który ma widok nadrzędny, tzn. będzie tak duży jak rodzic.

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

Rodzic zająca jest czerwony, a dziecko zielone. Dziecko zajmuje cały obszar. Ponieważ to width i heightmatch_parent.

Tutaj wpisz opis obrazka

Uwaga: jeśli rodzic zostanie zastosowany jako padding, to ta spacja nie zostanie uwzględniona.

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

Tutaj wpisz opis obrazka

Więc TextView hight = 300dp (wysokość nadrzędna)- (20 (paddingTop)+10 (paddingBottom)) = (300 - 30) dp = 270 dp

Fill_parent Vs match_parent

fill_parent poprzednia nazwa match_parent

Dla API poziomu 8 i wyższego fill_parent przemianowany na match_parent i fill_parent jest teraz przestarzały.

Więc fill_parent i match_parent są takie same.

Dokumentacja API dla fill_parent

Widok powinien być tak duży jak jego rodzic (minus wypełnienie). Stała ta jest przestarzała począwszy od poziomu API 8 i jest zastępowana przez {@code match_parent}.

 3
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-07 07:58:16

match_parent i fill_parent są tą samą właściwością, używaną do definiowania szerokości lub wysokości widoku na pełnym ekranie poziomo lub pionowo.

Te właściwości są używane w plikach XML Androida takich jak ten.

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

Lub

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

fill_parent był używany w poprzednich wersjach, ale teraz został wycofany i zastąpiony przez match_parent. Mam nadzieję, że ci to pomoże.

 3
Author: Mansuu....,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-28 05:52:46

Fill_parent: widok powinien być tak duży jak jego rodzic.

Teraz ta zawartość fill_parent jest przestarzała i zastąpiona przez match_parent.

 2
Author: Nikita Prajapati,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-01 13:08:55

Dla mnie wypełnij rodzic i Dopasuj rodzica wykonuje tę samą funkcję tylko że:

Fill parent : Był używany przed API 8

Match parent To zostało użyte z API 8+ Funkcja obu Wypełnia widok nadrzędny na bok wypełnienia

 2
Author: Xcode,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-28 04:25:01

Match_parent, co oznacza, że widok chce być tak duży jak jego rodzic (minus padding).

Wrap_content, co oznacza, że widok chce być wystarczająco duży, aby zamknąć jego zawartość (plus wypełnienie)

Dla lepszej ilustracji stworzyłem przykładowy layout, który demonstruje tę koncepcję. Aby zobaczyć efekt, dodałem obramowanie każdej zawartości textView.

W "Dopasuj rodzica" zawartość textView, możemy zobaczyć szerokość układu rozłożoną na całej jego rodzica długość.

Ale możemy zobaczyć w" Zawijanie zawartości " textView zawartości, jej szerokość układu zawinięty w jego zawartości (Zawartość zawijania) długości.

Układ Android

 2
Author: Subarata Talukder,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-26 14:07:16

FILL_PARENT został przemianowany na MATCH_PARENT w API na poziomie 8 i wyższym, co oznacza, że widok chce być tak duży jak jego rodzic ( minus wypełnienie) - Google

 2
Author: Sarvesh Thiruppathi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-13 10:53:53

Fill_parent (zmienił nazwę na MATCH_PARENT w API na poziomie 8 i wyższym), co oznacza, że widok chce być tak duży jak jego rodzic (minus wypełnienie)

Fill_parent: widok powinien być tak duży jak jego rodzic (minus wypełnienie). Ta stała jest przestarzała, począwszy od poziomu 8 API i jest zastępowana przez match_parent

Dla Android API 1.6 do 2.1 match_parent spowoduje błąd, więc użyj fill_parent w takich przypadkach. Aby wspierać kompatybilność wsteczną, lepiej jest użyć fill_parent

Obie są statycznymi stałymi końcowymi, które reprezentują wartość -1

FILL_PARENT jest przestarzały w API na poziomie 8

WIĘC MATCH_PARENT I FILL_PARENT SĄ TAKIE SAME?

Tak, MATCH_PARENT i FILL_PARENT są po prostu różnymi nazwami stałych dla tej samej wartości całkowitej (-1 jeśli jesteś ciekawy) używanymi do określenia trybu układu widoku w jego rodzicu.

DLACZEGO DODANO MATCH_PARENT?

Jako Roman Guy (Android Developer w Google) powiedział, że zmienili nazwę, ponieważ "fill_parent" było mylące dla programistów. W rzeczywistości, "fill_parent" nie wypełnia pozostałej przestrzeni (do tego używasz atrybutu weight), ale przyjmuje jako

 1
Author: Patrick R,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-03 05:36:39