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

1235

Я немного запутался в двух свойствах XML: match_parent и fill_parent. Кажется, что оба они одинаковы. Есть ли разница между ними?

Теги:
android-layout

17 ответов

1048
Лучший ответ

Это одно и то же (в 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 для совместимости, правильно?
  • 11
    Должны быть некоторые различия, верно? Иначе, почему Google устарел и переименовал новый?
Показать ещё 4 комментария
204

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

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

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

  • 15
    ... за исключением дочернего объекта RelativeLayout с width = match_parent и, скажем, оставленным другим. Он не соответствует измерению своего родителя, он заполняет то, что остается в нем. Это служит только для причинения путаницы.
  • 7
    Поскольку FILL_PARENT и MATCH_PARENT означают, что представление хочет быть таким же большим, как его родитель, минус отступы родителя не в том, что внутреннее пространство, а не внешние измерения? Теперь я еще больше запутался!
Показать ещё 1 комментарий
19

Функционально никакой разницы, 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!

9

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

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

В Android API 1,6 до 2.1 MATCH_PARENT выдается ошибка, поэтому используйте fill_parent в этих случаях. Чтобы поддерживать обратную совместимость, лучше использовать fill_parent

  • Оба являются статическими конечными константами, которые представляют значение -1
  • fill_parent устарел на уровне API 8

Итак, MATCH_PARENT и FILL_PARENT одинаковы?

Да, MATCH_PARENT и fill_parent являются просто разными именами констант для одного и того же целочисленного значения (-1, если вам интересно), используемого для указания режима представления макета в его родительском объекте.

Итак, почему был добавлен MATCH_PARENT?

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

9

Для обеспечения совместимости лучше придерживаться 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 для более старых версий.
Показать ещё 1 комментарий
4

MATCH_PARENT и FILL_PARENT совпадают?

Да, MATCH_PARENT и FILL_PARENT являются просто разными именами констант для одного и того же целочисленного значения (-1, если вам интересно), используемого для указания режима представления вида в его родительском объекте.

Итак, почему был добавлен MATCH_PARENT?

Команда Android обнаружила, что разработчики неправильно интерпретировали FILL_PARENT, чтобы означать, что View заполнит оставшееся пространство, оставшееся в его родительском. Фактически, указав FILL_PARENT, View запрашивает, чтобы он был таким же большим, как и его родитель. Таким образом (как объяснил сам Ромен Гай в этом видео около 10:56), константа была переименована в MATCH_PARENT, чтобы уточнить ее использование.

Хорошо, я понимаю, как работает FILL_PARENT/MATCH_PARENT. Какое это имеет значение, если я использую тот или иной?

FILL_PARENT устарел. Быть осужденным не делает его дьяволом, но в конце концов он уйдет. Ваше приложение более надежно, используя MATCH_PARENT. Зачем использовать устаревшую опцию, когда текущая опция ведет себя точно так же?

Кроме того, FILL_PARENT фактически вводит в заблуждение. Я лично видел людей в замешательстве, потому что это не работает так, как они думали. Фактически, я видел один тег, использующий как FILL_PARENT, так и MATCH_PARENT, потому что разработчик думал (по понятным причинам), что они представляют собой два разных режима макета.

КАК ВЫ МОЖЕТЕ ПОЛУЧИТЬ ПОТРЕБОВАТЬ, ЧТОБЫ ТРЕБУЕТСЯ FILL_PARENT?

Вот краткий пример того, как путаница MATCH_PARENT/FILL_PARENT может привести к тому, что люди многократно прикладывают головы к своим столам. Сначала сделайте действительно простой макет, содержащий несколько экземпляров 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>
3

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

Подробнее о здесь.

3

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

2

Когда вы устанавливаете макет 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.

Изображение 2790

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

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

Изображение 2791

Итак, TextView hight = 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

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

2

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

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

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

0

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

0

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

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

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

В содержимом textView "Match parent" мы видим, что ширина макета, распределенная из его родительской цепочки, может быть увеличена.

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

Изображение 2792

0

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

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

сопоставить родительский Это использовалось из API 8+ Функция обоих Заполняет родительский вид в сторону прокладки

0

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

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

0

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

эти свойства используются в файлах android xml, подобных этому.

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

или

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

fill_parent использовался в предыдущих версиях, но теперь он устарел и заменен на match_parent. Надеюсь, это поможет вам.

0

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

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

Для Android API от 1.6 до 2.1 match_parent выдаст вам ошибку, поэтому в этих случаях используйте fill_parent. Чтобы поддерживать обратную совместимость, лучше использовать fill_parent

Оба являются статическими конечными константами, которые представляют значение -1

FILL_PARENT устарел на уровне API 8

SO MATCH_PARENT И FILL_PARENT являются одинаковыми?

Да, MATCH_PARENT и FILL_PARENT - это просто разные постоянные имена для одного и того же целочисленного значения (-1, если вам интересно), используемый для указания режима макета Views в его родительском объекте.

SO ПОЧЕМУ ДОЛЖЕН БЫТЬ MATCH_PARENT?

Как сказал Роман Гай (разработчик Android в Google), они изменили имя, потому что "fill_parent" запутался для разработчиков. В связи с тем, что "fill_parent" не заполняет оставшееся пространство (для этого вы используете атрибут веса), но он принимает как

Ещё вопросы

Сообщество Overcoder
Наверх
Меню