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

#android #android-layout

#Android #android-layout

Вопрос:

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

Комментарии:

1. если вы не стесняетесь developer.android.com/reference/android/view /…

Ответ №1:

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

Комментарии:

1. если я напишу приложение как для 1.6, так и для 2.2, я буду использовать fill_parent для совместимости, правильно?

2. Должны же быть какие-то различия, верно? Иначе почему Google устарел и переименовал новый?

3. @Halim Нет, разницы нет: оба определены как постоянные -1 . Я чувствую себя лучше по этому поводу, я тоже не получаю от этого улучшения … 🙂

4. @jlovison Нет, различий нет. Оба являются -1 . Вы получаете ошибку, потому что более старая платформа не знает о новом имени той же самой константы.

5. Так странно, что Android Studio по-прежнему помещает «fill_parent» во все макеты, созданные шаблоном по умолчанию! Я знаю, что они одинаковы, но я продолжаю возвращаться к этому вопросу SO каждый год, чтобы убедиться, что никто не обнаружил, что разница действительно есть. Может ли команда Google / Android, пожалуйста, изменить значение по умолчанию с «fill_parent» на «match_parent»? Заранее спасибо! 🙂

Ответ №2:

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

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

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

Комментарии:

1. …за исключением дочернего элемента RelativeLayout с width=match_parent и, скажем, left другого. Оно не соответствует родительскому измерению, оно заполняет то, что в нем остается. Это служит только для СОЗДАНИЯ путаницы.

2. Поскольку FILL_PARENT и MATCH_PARENT означают, что представление должно быть таким же большим, как его родительский элемент, за вычетом родительского заполнения, разве это не внутреннее пространство, а не внешние размеры? Теперь я еще больше запутался!

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

Ответ №3:

Функционально разницы нет, Google просто изменил название с fill_parent на match_parent, начиная с уровня API 8 (Android 2.2). FILL_PARENT по-прежнему доступен по соображениям совместимости.

LayoutParams.FILL_PARENT и LayoutParams.MATCH_PARENT оба имеют значение -1. Не уверен, что побудило Google сменить родительский элемент заполнения на родительский элемент соответствия 🙂

Поскольку большинство phones are >= Android 2.2 .. вы должны использовать Match Parent для будущей совместимости… не уверен, когда они прекратят использовать более старую родительскую константу Fill!

Ответ №4:

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

Ответ №5:

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

Проверьте здесь для получения дополнительной информации.

Ответ №6:

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

Ответ №7:

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

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

Ответ №8:

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

Комментарии:

1. Я не понимаю логики людей, когда они заявляют это. У родительского элемента есть дополнение. Или дочерний элемент остается от другого. Соответствует ли ему дочерний элемент? Нет. это заполняет оставшееся пространство? Здесь, в этом, по-видимому, причудливом мире, мы отвечаем: да.

2. @kaay Я полностью согласен, что новое имя хуже старого. Но то, что говорит Google, идет.

Ответ №9:

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

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

Ответ №10:

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

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

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

В содержимом TextView «Match parent» мы можем видеть, что ширина макета превышает всю длину родительского содержимого.

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

Макет Android

Комментарии:

1. Вопрос о разнице между match_parent (который вы рассмотрели) и fill_parent (который вы не затронули). Вместо этого вы сравнили его с wrap_content , о чем вопрос не задается.

Ответ №11:

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

Ответ №12:

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

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

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

Ответ №13:

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

Ответ №14:

FILL_PARENT не рекомендуется для API уровня 8 и выше, и для верхних версий он переименован в MATCH_PARENT

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

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

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

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

Ответ №15:

Оба, FILL_PARENT и MATCH_PARENT являются одинаковыми свойствами. FILL_PARENT устарел на уровне API 8.

Ответ №16:

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

Оба параметра FILL_PARENT и MATCH_PARENT имеют одинаковые свойства. FILL_PARENT устарел на уровне API 8.

Ответ №17:

1. match_parent

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

Примечание: Если к 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, так и в match parent.