Jaka jest różnica między rodzicami match_parent i fill_parent?

Odpowiedzi:

1235

Są takie same (w API Poziom 8+). Zastosowanie match_parent.

FILL_PARENT (przemianowany na MATCH_PARENT na poziomie API 8 i wyższym), co oznacza, że ​​widok chce być tak duży jak jego element nadrzędny (bez dopełnienia)

...

fill_parent: Widok powinien być tak duży jak jego rodzic (minus dopełnienie). Ta stała 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

Matt Ball
źródło
5
jeśli napiszę aplikację zarówno dla wersji 1.6, jak i 2.2, użyję fill_parent dla kompatybilności, prawda?
emeraldhieu
12
Muszą być jakieś różnice, prawda? W przeciwnym razie, dlaczego Google wycofało go i zmieniło nazwę na nową?
Stuckedoverflow
49
@ Halim Nie, nie ma różnicy : obie są zdefiniowane jako stałe -1. Czuję się lepiej, nie podoba mi się to, że ... :-)
arpy
2
@jlovison Nie, nie ma różnic. Oba są -1. Wystąpił błąd, ponieważ starsza platforma nie wie o nowej nazwie tej samej stałej.
Tapirboy 30.01.2015
16
To jest tak dziwne, że Android Studio nadal umieszcza „fill_parent” we wszystkich domyślnych układach utworzonych na podstawie szablonu! Wiem, że są takie same, ale co roku powracam do tego SO pytania, aby upewnić się, że nikt nie odkrył, że naprawdę jest różnica. Czy zespół Google / Android może zmienić domyślną wartość z „fill_parent” na „match_parent”? Z góry dziękuję! :)
swooby
246

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

Problem ze starą nazwą fill parentpolegał na tym, że implikuje to, że wpływa ona na wymiary elementu nadrzędnego, a match parentlepiej opisuje wynikowe zachowanie - dopasowuje wymiar do elementu nadrzędnego.

Obie stałe rozwiązują się -1na końcu, a więc powodują identyczne zachowanie w aplikacji. Jak na ironię, zmiana nazwy dokonana w celu wyjaśnienia rzeczy wydaje się wprowadzać zamieszanie, a nie go eliminować.

Tapirboy
źródło
17
... oprócz dziecka potomka RelativeLayout o szerokości = rodzic_pasowania i, powiedzmy, pozostawionego innego. Nie pasuje do wymiaru rodzica, wypełnia to, co w nim pozostaje. Służy to tylko PRZYCZYNIE zamieszania.
kaay
7
Skoro FILL_PARENT i MATCH_PARENT oznaczają, że widok chce być tak duży jak jego rodzic, minus dopełnienie rodzica nie jest tym, że przestrzeń wewnętrzna a nie wymiary zewnętrzne? Teraz jestem jeszcze bardziej zdezorientowany!
Caltor
@bnieland Usunąłem odniesienia do wymiarów wewnętrznych i zewnętrznych, ponieważ nie zgadzają się z dokumentacją Google na developer.android.com/reference/android/view/…, chociaż widzę podobny (bezpodstawny) cytat na sevennet.org / 2014/11/22 /… z tego miejsca możesz uzyskać informacje.
Caltor,
28

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_PARENTi LayoutParams.MATCH_PARENToba mają wartość -1. Nie jestem pewien, co skłoniło google do zmiany z Fill Parent na Match Parent :)

Ponieważ większość phones are >= Android 2.2... powinieneś użyć Match Parent dla przyszłej kompatybilności ... nie jestem pewien, kiedy przestaną używać starszej stałej Fill Parent!

Umair
źródło
11

Ze względu na kompatybilność lepiej trzymać się fill_parent, tzn. Gdy obsługujemy urządzenia z API poniżej 8. Ale jeśli twoja aplikacja jest ukierunkowana na API 8 i nowsze wersje, powinieneś użyć match_parent.

Olumide Oyetoke
źródło
8
Tylko kompatybilność wsteczna. Jeśli FILL_PARENTjest przestarzałe (jak wspomniano powyżej Matt Ball), wówczas jedyną opcją dla zgodności z przodu jest MATCH_PARENT.
2
Zgadzam się, ale jeśli masz zamiar napisać kod dla urządzeń o niższym poziomie API, np .: 2.3,2.2,2.1, w tej chwili musisz użyć FILL_PARENT. Miałem problemy z używaniem match_parent dla starszych wersji.
MSA
czas usunąć tę odpowiedź. To już nie jest istotne i może dawać niewłaściwą radę nowym programistom
Tim
8

FILL_PARENTjest przestarzałe na poziomie API 8 i MATCH_PARENTużywa interfejsu API wyższego poziomu

Avanish Kumar
źródło
8

match_parent jest używany zamiast fill_parent i ustawia go tak daleko, jak idzie rodzic. Po prostu użyj match_parent i zapomnij o fill_parent . Całkowicie porzuciłem fill_parent i wszystko jest jak zwykle idealne.

Sprawdź tutaj, aby uzyskać więcej.

Koech
źródło
6

Żeby nadać mu nazwę bliższą rzeczywistej akcji . "fill_parent"nie wypełnia pozostałego miejsca, jak sugeruje nazwa (do tego celu służy atrybut wagi). Zamiast tego zajmuje tyle miejsca, ile jego układ macierzysty. Właśnie dlatego nowa nazwa to"match_parent"

Jawad Zeb
źródło
2
Nie rozumiem logiki ludzi, kiedy to stwierdzają. Rodzic ma wyściółkę. Lub dziecko jest pozostawione innym. Czy dziecko to pasuje? Nie. Czy wypełnia pozostałą przestrzeń? Tutaj, w pozornie Bizzarro World, odpowiadamy: tak.
kaay
1
@kaay Całkowicie zgadzam się, że nowa nazwa jest gorsza niż stara. Ale to, co mówi Google, idzie.
Caltor
6

Oba mają podobną funkcjonalność, z tą różnicą, że parametr fill_parent jest używany do poziomu API 8, a match_parent jest używany po poziomie API 8 lub wyższym.

Praveen Gaur
źródło
6

Kiedy ustawisz układ widthi height jak match_parentwe XMLwłaściwości, zajmie on cały obszar, który ma widok rodzica, 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>

Zając rodzic jest czerwony, a dziecko zielony. Dziecko zajmuje cały obszar. Ponieważ to jest widthi height jest match_parent.

wprowadź opis zdjęcia tutaj

Uwaga: Jeśli rodzic zastosuje padding, to miejsce nie zostanie uwzględnione.

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

wprowadź opis zdjęcia tutaj

Więc TextView wzrost = 300dp (wzrost rodzica) - (20 (paddingTop) +10 (paddingBottom)) = (300-30) dp = 270 dp

fill_parent Vs match_parent

fill_parent to poprzednia nazwa match_parent

W przypadku interfejsu API poziomu 8 i wyższego fill_parentzmieniono jego nazwę na teraz match_parenti fill_parentjest przestarzałe.

Więc fill_parenti match_parentsą takie same.

Dokumentacja API dla fill_parent

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


źródło
4

match_parent, co oznacza, że ​​widok chce być tak duży jak jego rodzic (minus dopełnienie).

wrap_content, co oznacza, że ​​widok chce być na tyle duży, aby zamknąć jego zawartość (plus dopełnienie)

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

W tekście „Dopasuj element nadrzędny” możemy zobaczyć szerokość jego układu rozłożoną na całej długości elementu nadrzędnego.

Ale możemy zobaczyć w tekście „Zawiń zawartość” Wyświetlanie zawartości, szerokość układu zawinięta w długość jego treści (Zawiń zawartość).

Układ Androida

Subarata Talukder
źródło
4

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 w poziomie lub w pionie.

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

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

lub

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

fill_parentbył używany w poprzednich wersjach, ale teraz jest przestarzały i zastąpiony przez match_parent. Mam nadzieję, że ci to pomoże.

Mansuu ....
źródło
3

fill_parent: Widok powinien być tak duży jak jego element nadrzędny.

teraz ta treść fill_parent jest przestarzała i zastępowana przez match_parent.

Nikita Prajapati
źródło
3

Dla mnie wypełnij element nadrzędny i dopasuj element nadrzędny wykonuje tylko tę samą funkcję, co:

Wypełnij element nadrzędny : był używany przed API 8

match parent To zostało użyte z API 8+ Funkcja Oba Wypełnia widok rodzica z boku dopełnienia

Xcode
źródło
2

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

Sarvesh Thiruppathi
źródło
2

FILL_PARENT jest przestarzałe od poziomu API 8 i wyższego, a dla wyższych wersji zmieniono jego nazwę na MATCH_PARENT

Obie są takie same FILL_PARENTi MATCH_PARENT,FILL_PARENT stosuje się w niższej wersji API mniejszej niż poziom 8 i MATCH_PATENT są stosowane w wyższych wyższego poziomu niż 8 API.

FILL_PARENT (przemianowany MATCH_PARENT na API Poziom 8 i wyższy), co oznacza, że ​​widok chce być tak duży jak jego rodzic (minus dopełnienie)

fill_parent: Widok powinien być tak duży jak jego rodzic (minus dopełnienie). Ta stała jest przestarzała, począwszy od poziomu API 8 i jest zastępowana przezmatch_parent.

Aby uzyskać więcej informacji, odwiedź stronę

Utkarsh Srivastava
źródło
0

1. match_parent

Gdy ustawisz szerokość i wysokość układu jako match_parent, zajmie on cały obszar, który ma widok rodzica, tzn. Będzie tak duży jak rodzic.

Uwaga : Jeśli rodzic zastosuje padding, to miejsce nie zostanie uwzględnione.

Kiedy domyślnie tworzymy layout.xml, mamy RelativeLayout jako domyślny nadrzędny Widok z Androidem: layout_width = "match_parent" i android: layout_height = "match_parent", tj. Zajmuje całą szerokość i wysokość ekranu telefonu komórkowego.

Pamiętaj również, że wyściółka jest nakładana na wszystkie strony,

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

Teraz możemy dodać widok podrzędny LinearLayout i ustawia jego layout_width = "match_parent" i layout_height = "match_parent", widok graficzny wyświetlałby coś takiego,

match_parent_example

Kod

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:

Jest to to samo, co match_parent, fill_parent został amortyzowany na poziomie API 8, więc jeśli używasz API na poziomie 8 lub wyższym, musisz unikać używania fill_parent

Wykonajmy te same kroki, co w przypadku match_parent, po prostu użyj wszędzie fill_parent.

Zobaczysz, że nie ma różnicy w zachowaniu zarówno w rodzicach fill_parent, jak i match rodzic.

Hossam Scott
źródło