В чем разница между match parent и fill parent?

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

17 ответов


Это одно и то же (на уровне 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


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

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

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


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


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


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

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

для Android API 1.6 to 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 " не заполняет оставшееся пространство (для этого вы используете атрибут weight), но занимает столько же места, сколько его Родительский макет. Вот почему новое имя -"match_parent"


MATCH_PARENT и FILL_PARENT такие же?

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

почему MATCH_PARENT добавить?

команда Android обнаружила, что разработчики неправильно интерпретировали FILL_PARENT означает, что a View заполнит оставшееся пространство, оставшееся в его родителе. На самом деле, указание FILL_PARENT на View запрашивает быть таким же большим, как его родитель.

хорошо, я понимаю, как FILL_PARENT/MATCH_PARENT строительство. Какая разница, использую я то или другое?

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

кроме того, FILL_PARENT is фактически вводит в заблуждение. Я лично видел людей в замешательстве, потому что это не работает так, как они думали. На самом деле, я видел один тег, используя оба 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>

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


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

Регистрация здесь дополнительные.


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


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


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

enter image description here

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

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

enter image description here

So TextView hight = 300dp (родительская высота) - (20 (paddingTop)+10 (paddingBottom)) = (300 - 30) ДП = 270 dp

fill_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}.


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. Надеюсь, это вам поможет.


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

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


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

заполнить parent: Использовался до API 8

матч родитель Это было использовано из API 8+


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

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

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

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

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

Android Layout


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


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" не заполняет оставшееся пространство (для этого вы используете атрибут weight), но он принимает как