Яка різниця між 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.