Яка різниця між fill_parent і wrap_content?


276

В Android, коли розміщувати віджети, яка різниця між fill_parent( match_parentAPI рівня 8 і вище) та wrap_content?

Чи є документація, на яку можна вказати? Мені цікаво зрозуміти це дуже добре.


33
Візьмемо до уваги, що fill_parentперейменований match_parentна API рівня 8 і вище.
— gfrigon

Відповіді:


266

Будь-який атрибут може бути застосований до горизонтального чи вертикального розміру View (візуальний контроль). Він використовується для встановлення розміру Перегляд або Макетів на основі вмісту або розміру батьківського макета, а не явного введення розміру.

fill_parent(застаріла і перейменована MATCH_PARENTв API рівня 8 і вище)

Встановлення макета віджета на fill_parent змусить його розширити, щоб зайняти стільки місця, скільки доступно в елементі макета, в який він розміщений. Це приблизно еквівалентно встановленню док-стилю керування формою Windows Fill.

Якщо встановити макет верхнього рівня або елемент керування для_захисту, він змусить його зайняти весь екран.

wrap_content

Якщо встановити розмір перегляду wrap_content, він змусить його розширюватися лише досить далеко, щоб містити значення (або дочірні елементи управління), які він містить. Для елементів керування - як текстові поля (TextView) або зображення (ImageView) - це перетворить текст або зображення, що відображаються. Для елементів компонування він змінить розмір макета, щоб відповідати елементам керування / макету, доданим як його дочірнім пристроєм.

Це приблизно еквівалент встановлення властивості Windows Form Control Autosizeдля True.

Інтернет-документація

Там якась - то деталь в коді документації Android тут .


12
що робити, якщо ширина зображення більша за ширину екрана, і я встановлюю ширину перегляду зображення як заповнювальну. чи буде зображення стиснене до розміру екрана?
— Джон Уотсон

@JohnWatson Ви знайшли свою відповідь? Я також цікавий.
— Рахаель

Добре знати еквівалентні властивості Windows Form Control, які згадуються.
— Ремпелос

Що ти бачив @JohnWatson? Яка ваша історія? Яка відповідь?
— СподіваюсьДопомога

36

fill_parent(застаріле) =match_parent
Межа дитячого подання розширюється, щоб відповідати межі батьківського подання.

wrap_content
Кордон дитячого зору обертається щільно навколо власного вмісту.

Ось кілька зображень, щоб зробити речі більш зрозумілими. Зелений і червоний є TextViews. Біле - це LinearLayoutдемонстрація наскрізь.

введіть тут опис зображення

Кожен View(a TextView, an ImageView, a Buttonтощо) потребує встановлення widthта heightперегляду. У файлі макета xml це може виглядати приблизно так:

android:layout_width="wrap_content"
android:layout_height="match_parent"

Окрім встановлення ширини та висоти на match_parentабо wrap_content, ви також можете встановити їх на якесь абсолютне значення:

android:layout_width="100dp"
android:layout_height="200dp"

Взагалі, це не так добре, оскільки воно не настільки гнучко для пристроїв різного розміру. Після того, як ви зрозуміли wrap_contentі match_parent, наступне, що потрібно дізнатися - це layout_weight.

Дивитися також

XML для наведених вище зображень

Вертикальна лінійна схема

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:layout_width="match_parent"
              android:layout_height="match_parent">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:text="width=wrap height=wrap"
        android:background="#c5e1b0"/>

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:text="width=match height=wrap"
        android:background="#f6c0c0"/>

    <TextView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:text="width=match height=match"
        android:background="#c5e1b0"/>

</LinearLayout>

Горизонтальний лінійний макет

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="horizontal"
              android:layout_width="match_parent"
              android:layout_height="match_parent">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:text="WrapWrap"
        android:background="#c5e1b0"/>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:text="WrapMatch"
        android:background="#f6c0c0"/>

    <TextView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:text="MatchMatch"
        android:background="#c5e1b0"/>

</LinearLayout>

Примітка

Пояснення у цій відповіді передбачає, що немає маржі чи прокладки . Але навіть якщо є, основне поняття все одно те саме. Межа / проміжок перегляду просто регулюється значенням поля або прокладки.


9
  • fill_parent зробить ширину або висоту елемента таким же великим, як батьківський елемент, іншими словами, контейнер.

  • wrap_content зробить ширину або висоту настільки великими, як потрібно, щоб містити елементи всередині нього.

Клацніть тут, щоб отримати довідку про ANDROID DOC


який буде контейнер? як оточити види різних контейнерів?
— Tejzeratul

2

fill_parent :

Компонент, розміщений макет, fill_parentбуде обов'язковим для розширення, щоб заповнити елементи блоку компонування якомога більше місця. Це відповідає властивості dockstyle управління Windows. Верхній макет або елемент керування, щоб fill_parentзмусити його зайняти весь екран.

wrap_content

Налаштування перегляду розміру wrap_contentбуде змушене для перегляду розширюється, щоб відображати весь вміст. У TextView і ImageView елементи управління, наприклад, встановлений на wrap_contentвідображатиме весь свій внутрішній текст і зображення. Елементи макета змінюватимуть розмір відповідно до вмісту. Налаштуйте подання розміру атрибута Autosize wrap_contentприблизно еквівалентно, щоб встановити елемент управління Windows для True.

Для детальної інформації перегляньте це посилання: http://developer.android.com/reference/android/view/ViewGroup.LayoutParams.html

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.