Яка різниця між match_parent та fill_parent?


Відповіді:


1235

Вони те саме (в API рівня 8+). Використовуйте match_parent.

FILL_PARENT (перейменований на MATCH_PARENT в API рівня 8 і вище), що означає, що перегляд хоче бути таким же великим, як його батьківський (мінус прокладки)

...

fill_parent: Вид повинен бути таким же великим, як його батьківський (мінус прокладки). Ця константа застаріла, починаючи з рівня 8 API і замінюється на match_parent.

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


5
якщо я пишу додаток для 1.6 і 2.2, я буду використовувати fill_parent для сумісності, це правильно?
смарагдовий

12
Мають бути певні відмінності, правда? Інакше чому Google знецінив її та перейменував нову?
затримався переплив

49
@Halim Ні, немає ні differece : Обидва визначаються як константи -1. Я вам з цього почуваєтесь краще, я не відчуваю жодних зусиль у цьому ... :-)
arpy

2
@jlovison Ні, відмінностей немає. Обидва є -1. Ви отримуєте помилку, оскільки старша платформа не знає про нову назву тієї самої константи.
Тапірбой

16
Це настільки дивно, що Android Studio все ще ставить "fill_parent" у всі створені шаблони за замовчуванням макети! Я знаю, що вони однакові, але я щороку повертаюсь до цього питання ТА, щоб переконатися, що ніхто не виявив, що дійсно є різниця. Чи може команда Google / Android змінити значення за замовчуванням з "fill_parent" на "match_parent"? Спасибі заздалегідь! :)
swooby

246

Google змінив ім'я, щоб уникнути плутанини.

Проблема старого імені fill parentполягала в тому, що воно передбачає його вплив на розміри батьків, тоді як match parentкраще описує результуючу поведінку - відповідність виміру з батьківською.

Обидві константи вирішуються -1в кінцевому підсумку і таким чином призводять до однакової поведінки в додатку. За іронією долі, ця зміна назви, зроблена для з'ясування речей, здається, додала замішання, а не усунення.


17
... за винятком дитини, що стосується RelativeLayout, з шириною = match_parent і, скажімо, зліва від іншого. Він не відповідає розміру свого батька, він заповнює те, що залишається в ньому. Це служить лише для ПІТНЕННЯ ПРИЧИНИ.
kaay

7
Оскільки FILL_PARENT і MATCH_PARENT означають, що вид хоче бути таким же великим, як його батьківський, за винятком прокладки батьків, чи не внутрішній простір, а не зовнішні розміри? Тепер я ще більше плутаю!
Caltor

@bnieland Я видалив посилання на внутрішні та зовнішні розміри, оскільки вони не узгоджуються з документацією google на сайті developer.android.com/reference/android/view/…, хоча я можу побачити подібну (необгрунтовану) цитату на sevennet.org / 2014/11/22 /… звідки ви могли отримати свою інформацію.
Caltor

28

Функціонально немає різниці, Google просто змінив ім'я з fill_parent на match_parent, з рівня API 8 (Android 2.2). FILL_PARENT все ще доступний з причини сумісності.

LayoutParams.FILL_PARENTі LayoutParams.MATCH_PARENTобидва мають значення -1. Не впевнений, який спокусник Google змінив з Fill Parent на Match Parent :)

Оскільки більшість phones are >= Android 2.2.. ви повинні використовувати Match Parent для майбутньої сумісності ... не впевнені, коли вони припинять роботу старого константа Fill Parent!


11

Для сумісності краще дотримуватися fill_parent, тобто при підтримці нижче пристроїв API 8. Але якщо ваша програма націлена на API 8 і вище, замість цього слід використовувати match_parent.


8
Хоча лише зворотна сумісність Якщо FILL_PARENTця система застаріла (про що згадував Метт Балл вище), то єдиним варіантом сумісності вперед є MATCH_PARENT.

2
Погодьтеся, але якщо ви плануєте написати код для пристроїв нижчого рівня API, наприклад: 2.3,2.2,2.1 на той момент, коли вам потрібно використовувати FILL_PARENT. У мене виникли деякі проблеми з використанням match_parent для старих версій.
MSA

настав час видалити цю відповідь. Це більше не актуально і може дати неправильну пораду новим розробникам
Тім,


8

match_parent використовується замість fill_parent і встановлює його так далеко, як йде батько. Просто використовуйте match_parent і забудьте про fill_parent . Я повністю скинув fill_parent і все ідеально, як завжди.

Перевірте тут більше.


6

Просто, щоб дати йому ім’я ближче до його фактичної дії . "fill_parent"не заповнює залишок місця, як випливає з назви (для цього ви використовуєте атрибут ваги). Натомість він займає стільки ж місця, як і його батьківський макет. Ось чому нове ім’я"match_parent"


2
Я не розумію логіку людей, коли вони це заявляють. У батьків є підкладка. Або дитина залишилася від іншого. Чи відповідає дитині це? Ні, це заповнює залишився простір? Тут, у тому, що, мабуть, Bizzarro World, ми відповідаємо: так.
kaay

1
@kaay Я повністю згоден, що нова назва гірша за стару. Але те, що говорить Google, іде.
Caltor

6

Обидва мають однакову функціональну відмінність лише в тому, що fill_parent використовується до рівня 8 API, а match_parent використовується після рівня 8 API або вище.


6

Якщо ви встановите макет widthі height як match_parentу XMLвластивості, він буде займати всю область, яку має батьківський вигляд, тобто він буде таким же великим, як і батьківський.

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

Заєць із батьків є червоним, а дитина - зеленим. Дитина займає всю площу. Тому що це є widthі height є match_parent.

введіть тут опис зображення

Примітка: Якщо для батьків застосовано прокладку, цей пробіл не буде включено.

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

введіть тут опис зображення

Отже висота TextView = 300dp (батьківська висота) - (20 (paddingTop) +10 (paddingBottom)) = (300 - 30) dp = 270 dp

fill_parent Vs match_parent

fill_parent попередня назва match_parent

Для API рівня 8 і вище fill_parentперейменовано як match_parentі fill_parentзараз застаріле.

Так fill_parentі match_parentоднакові.

Документація API для fill_parent

Вид повинен бути таким же великим, як його батьківський (мінус прокладки). Ця константа застаріла, починаючи з рівня 8 API і замінюється на {@code match_parent}.


4

match_parent, що означає, що перегляд хоче бути таким же великим, як його батьківський (мінус прокладки).

wrap_content, що означає, що перегляд хоче бути достатньо великим, щоб укласти його вміст (плюс прокладки)

Задля кращої ілюстрації я створив зразок макета, який демонструє цю концепцію. Щоб побачити його ефект, я додав рамку кожного вмісту textView.

У вмісті textView "Зрівняти батьків" ми бачимо, що його ширина макета поширюється на батьківську по всій довжині.

Але ми можемо бачити вміст textView "Обгортання вмісту", його ширина макета, обгорнута його довжиною контенту (обгортання вмісту).

Макет Android


4

match_parent і fill_parent є тим самим властивістю, яке використовується для визначення ширини чи висоти зображення в повноекранному режимі по горизонталі або вертикалі.

Ці властивості використовуються у таких файлах xroid для Android.

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

або

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

fill_parentвикористовувався в попередніх версіях, але тепер він був застарілим і замінений на match_parent. Сподіваюся, це допоможе тобі.


3

fill_parent: Вид повинен бути таким же великим, як і його батьківський.

тепер цей вміст fill_parent застарілий і замінений на match_parent.


3

Для мене батько, що заповнює, і батько збігу виконує лише ту саму функцію, що:

батьківський запуск : використовувався до API 8

match parent Це було використано з API 8+ Функція обох заповнює батьківський вигляд убік прокладки


2

FILL_PARENT було перейменовано на MATCH_PARENT в API рівня 8 і вище, що означає, що перегляд хоче бути таким же великим, як його батьківський (мінус прокладки) - Google


2

FILL_PARENT застаріла з рівня API 8 і вище і перейменована для верхніх версій як MATCH_PARENT

Обидва такі ж , FILL_PARENTі MATCH_PARENT, FILL_PARENTбув використаний в більш низькою версії менше , ніж рівень API 8 і MATCH_PATENT використовуються в більш високому рівні API , більше 8.

FILL_PARENT(перейменований MATCH_PARENTв API рівня 8 і вище), що означає, що перегляд хоче бути таким же великим, як його батьківський (мінус прокладки)

fill_parent: Вид повинен бути таким же великим, як його батьківський (мінус прокладки). Ця константа застаріла, починаючи з рівня 8 API і замінюється на match_parent.

Для отримання більш детальної інформації відвідайте цю сторінку


0

1. match_parent

Якщо ви встановите ширину та висоту макета як match_parent, він займе всю площу, яку має батьківський вигляд, тобто він буде таким же великим, як і батьківський.

Примітка : Якщо для батьків застосовано прокладку, то цей простір не буде включено.

Коли ми створюємо layout.xml за замовчуванням, у нас є RelativeLayout як батьківський перегляд за замовчуванням з 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"

Тепер давайте додавати підпогляд LinearLayout та встановлює його layout_width = "match_parent" та layout_height = "match_parent", графічний вигляд відображатиме щось подібне,

match_parent_example

Код

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:

Це те саме, що match_parent, fill_parent було амортизовано в рівні API 8. Отже, якщо ви використовуєте API рівня 8 або вище, ви повинні уникати використання fill_parent

Дозволяємо виконувати ті ж кроки, що й для match_parent, просто замість цього використовуйте fill_parent скрізь.

Ви б побачили, що немає різниці в поведінці як у „fill_parent“, так і в „батьківському збігу“.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.