it-swarm.com.ru

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

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

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

265
pupeno

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

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

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

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

wrap_content

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

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

Электронная документация

В документации к коду Android есть некоторые детали здесь .

254
Reto Meier

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

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

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

enter image description here

Каждому 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>

Заметка

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

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

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

Нажмите здесь для ссылки Android DOC

9
Devrath

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

2
IntelliJ Amiya