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

276

В Android, когда размещаются виджеты, в чем разница fill_parent( match_parentв API Level 8 и выше) и wrap_content?

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

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

Ответы:

266

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

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

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

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

wrap_content

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

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

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

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

Рето Мейер
источник
12
Что делать, если ширина изображения больше ширины экрана, и я установил ширину просмотра изображения как fill_parent. изображение будет сжато до размера экрана?
Джон Уотсон,
@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 для изображений выше

Вертикальный 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>

Заметка

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

Suragch
источник
9
  • fill_parent сделает ширину или высоту элемента такой же, как родительский элемент, другими словами, контейнер.

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

Нажмите здесь для справки ANDROID DOC

Devrath
источник
какой будет контейнер? как окружить виды разными контейнерами?
Тейзератул
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

IntelliJ Amiya
источник