#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).
Комментарии:
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.