В чем разница между match_parent и fill_parent?

Ответы:

1236

Это одно и то же (в API уровня 8+). Использование match_parent.

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

...

fill_parent: Представление должно быть таким же большим, как его родитель (без отступов). Эта константа не рекомендуется, начиная с уровня API 8, и заменяется на match_parent.

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

Мэтт Болл
источник
5
если я напишу приложение для 1.6 и 2.2, я буду использовать fill_parent для совместимости, правильно?
Emeraldhieu
12
Должны быть некоторые различия, верно? Иначе, почему Google устарел и переименовал новый?
stuckedoverflow
49
@ Халим Нет, нет разницы : оба определены как постоянные -1. Если вы чувствуете себя лучше по этому поводу, я тоже не получаю приличия ... :-)
arpy
2
@jlovison Нет, различий нет. И то и другое -1. Вы получаете ошибку, потому что старая платформа не знает о новом имени той же самой константы.
Тапирбой
16
Это так странно, что Android Studio по-прежнему помещает «fill_parent» во все макеты, созданные по умолчанию! Я знаю, что они одинаковы, но я продолжаю возвращаться к этому SO вопросу каждый год, чтобы убедиться, что никто не обнаружил, что на самом деле есть разница. Может ли команда Google / Android изменить значение по умолчанию с "fill_parent" на "match_parent"? Заранее спасибо! :)
swooby
246

Google изменил имя, чтобы избежать путаницы.

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

Обе константы разрешаются -1в конце, и поэтому приводят к одинаковому поведению в приложении. По иронии судьбы, это изменение имени, внесенное для разъяснения вещей, скорее, добавило путаницу, чем устранило ее.

Tapirboy
источник
17
... за исключением дочернего объекта RelativeLayout с width = match_parent и, скажем, оставленного другого. Он не соответствует измерению своего родителя, он заполняет то, что остается в нем. Это служит только для причинения путаницы.
Кай
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!

Umair
источник
11

Для совместимости лучше придерживаться fill_parent, т.е. при поддержке устройств ниже API 8. Но если ваше приложение предназначено для API 8 и выше, вы должны использовать match_parent.

Olumide Oyetoke
источник
8
Только обратная совместимость, хотя. Если FILL_PARENTэто устарело (как упомянуто Мэттом Боллом выше), то единственная опция для прямой совместимости - это MATCH_PARENT.
2
Согласитесь, но если вы планируете написать код для устройств более низкого уровня API, например: 2.3,2.2,2.1, на данный момент вам нужно использовать FILL_PARENT. У меня были некоторые проблемы с использованием match_parent для более старых версий.
MSA
пришло время удалить этот ответ. Это больше не актуально и может дать неправильный совет новым разработчикам
Тим
8

FILL_PARENTустарела на уровне API 8 и MATCH_PARENTиспользует API более высокого уровня

Аваниш Кумар
источник
8

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

Проверьте здесь для больше.

Koech
источник
6

Просто чтобы дать ему имя ближе к его действию . "fill_parent"не заполняет оставшееся место, как следует из названия (для этого вы используете весовой атрибут). Вместо этого он занимает столько же места, сколько родительский макет. Вот почему новое имя"match_parent"

Джавад Зеб
источник
2
Я не понимаю логику людей, когда они утверждают это. Родитель имеет прокладку. Или ребенок остался от другого. Соответствует ли ребенок этому? Нет, он заполняет оставшееся пространство? Вот в чем, по-видимому, Мир Биззарро, мы отвечаем: да.
Кай
1
@ Кей, я полностью согласен, что новое имя хуже старого. Но то, что говорит Google, идет.
Caltor
6

Оба имеют схожую функциональность, единственное отличие состоит в том, что fill_parent используется до уровня API 8, а match_parent используется после уровня API 8 или выше.

Правин Гаур
источник
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 hight = 300dp (родительский hight) - (20 (paddingTop) +10 (paddingBottom)) = (300 - 30) dp = 270 dp

fill_parent против match_parent

fill_parent предыдущее имя match_parent

Для API уровня 8 и выше fill_parentпереименован в match_parentи fill_parentустарел.

Так fill_parentи match_parentесть одно и то же.

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

Представление должно быть таким же большим, как его родитель (за исключением заполнения). Эта константа не рекомендуется, начиная с уровня API 8, и заменяется на {@code match_parent}.


источник
4

match_parent, что означает, что представление хочет быть таким же большим, как его родитель (минус отступ).

wrap_content, что означает, что представление хочет быть достаточно большим, чтобы заключить его содержимое (плюс заполнение)

Для лучшей иллюстрации я создал образец макета, который демонстрирует эту концепцию. Чтобы увидеть его эффект, я добавил границы каждого содержимого textView.

В текстовом представлении «Соответствие родителя» мы видим, как ширина макета распределяется по всей длине родительского элемента.

Но мы можем видеть в текстовом представлении «Wrap Content» его ширину макета, завернутую в длину его содержимого (Wrap Content).

Android-макет

Субарата Талукдер
источник
4

match_parent и fill_parent являются тем же свойством, используемым для определения ширины или высоты просмотра в полноэкранном режиме по горизонтали или вертикали.

Эти свойства используются в XML-файлах 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. Я надеюсь, что это поможет вам.

Mansuu ....
источник
3

fill_parent: представление должно быть таким же большим, как его родитель.

теперь этот контент fill_parent устарел и заменен на match_parent.

Никита Праджапати
источник
3

Для меня заполнить родительский и сопоставить родительский выполняет ту же функцию, только что:

заполнить родительский : использовался до API 8

match parent Это было использовано из API 8+. Функция Both Заполняет родительское представление кроме отступов.

Xcode
источник
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 Level 8 и выше), что означает, что представление хочет быть таким же большим, как его родитель (минус отступ)

fill_parent: Представление должно быть таким же большим, как его родитель (без отступов). Эта константа не рекомендуется, начиная с уровня API 8, и заменяется на match_parent.

Для более подробной информации, пожалуйста, посетите эту страницу

Уткарш Шривастава
источник
0

1. match_parent

Когда вы устанавливаете ширину и высоту макета как match_parent, он будет занимать всю область, которую имеет родительское представление, то есть он будет таким же большим, как родительский.

Примечание . Если для родительского элемента применяется отступ, то это пространство не будет включено.

Когда мы создаем layout.xml по умолчанию, мы имеем RelativeLayout в качестве родительского View по умолчанию с 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, так и в match parent.

Хоссам Скотт
источник