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


276

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

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


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>

Заметка

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


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

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

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


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

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.