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

В Android при компоновке виджетов, какая разница между fill_parent (match_parent в API уровня 8 и выше) и wrap_content?

Есть ли документация, на которую можно указать? Мне интересно это понять.

Обратите внимание, что fill_parent был переименован в match_parent в API уровня 8 и выше.

gfrigon 22.06.2012 22:20
285
1
276 526
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Ответ принят как подходящий

Любой атрибут может применяться к горизонтальному или вертикальному размеру представления (визуальный контроль). Он используется для установки размера представления или макета на основе его содержимого или размера его родительского макета, а не явного указания размера.

fill_parent (устарело и переименовано в MATCH_PARENT в API уровня 8 и выше)

Установка макета виджета на fill_parent заставит его расшириться, чтобы занять столько места, сколько доступно в элементе макета, в который он был помещен. Это примерно эквивалентно установке стиля док-станции элемента управления Windows Form на Fill.

Установка макета верхнего уровня или элемента управления на fill_parent заставит его занять весь экран.

wrap_content

Установка размера представления на wrap_content заставит его расшириться настолько, чтобы вместить значения (или дочерние элементы управления), которые он содержит. Для элементов управления, таких как текстовые поля (TextView) или изображения (ImageView), это будет переносить отображаемый текст или изображение. Для элементов макета он изменит размер макета, чтобы он соответствовал элементам управления / макетам, добавленным в качестве его дочерних элементов.

Это примерно эквивалентно установке свойства Autosize элемента управления Windows Form в значение True.

Онлайн-документация

Некоторые подробности можно найти в документации по коду Android здесь.

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

John Watson 10.08.2012 15:18

@JohnWatson ты нашел свой ответ? Мне тоже любопытно.

Rachael 18.09.2015 19:48

Полезно знать упомянутые эквивалентные свойства элемента управления Windows Form.

Rempelos 25.01.2016 05:46

Что вы видели @JohnWatson? Какая у тебя история? Какой ответ ?

HopefullyHelpful 18.08.2016 14:29
  • fill_parent сделает ширину или высоту элемента равной размером с родительский элемент, другими словами, контейнер.

  • wrap_content сделает ширину или высоту настолько большой, насколько это необходимо для содержать элементы внутри него.

Нажмите здесь, чтобы получить справку по ANDROID DOC

какой будет контейнер? как окружить представления разными контейнерами?

Tejzeratul 11.05.2016 18:00

fill_parent:

Компонент скомпонованного макета для fill_parent будет обязательно расширять, чтобы заполнить элементы устройства макета, насколько это возможно в пространстве. Это соответствует свойству dockstyle элемента управления Windows. Верхний макет или элемент управления для fill_parent заставит его занять весь экран.

wrap_content

Настройка просмотра размера wrap_content будет принудительно расширена для отображения всего содержимого. Например, для элемента управления TextView и ImageView установлено значение wrap_content, и будет отображаться весь внутренний текст и изображение. Элементы макета изменят размер в соответствии с содержимым. Настройте представление размера атрибута Autosize wrap_content, примерно эквивалентного значению True для элемента управления Windows.

Для подробностей, пожалуйста, перейдите по этой ссылке: http://developer.android.com/reference/android/view/ViewGroup.LayoutParams.html

fill_parent (не рекомендуется) = match_parent
Граница дочернего представления расширяется, чтобы соответствовать границе родительского представления.

wrap_content
Граница дочернего представления плотно обтекает его собственное содержимое.

Вот несколько изображений, чтобы прояснить ситуацию. Зеленый и красный - это TextViews. Белый - это просвечивающий LinearLayout.

Каждому View (TextView, ImageView, 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 для изображений выше

Вертикальный LinearLayout

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

Горизонтальный 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>

Примечание

Объяснение в этом ответе предполагает, что маржа или отступ отсутствует. Но даже если и есть, основная концепция остается прежней. Граница / интервал вида просто регулируется значением поля или отступа.

Другие вопросы по теме