Qual é a diferença entre fill_parent e wrap_content?

276

No Android, quando o layout dos widgets, qual é a diferença entre fill_parent( match_parentno nível 8 da API e superior) e wrap_content?

Existe alguma documentação para onde você pode apontar? Estou interessado em entender muito bem.

pupeno
fonte
33
Observe que o fill_parentnome foi renomeado match_parentno API Level 8 e superior.
gfrigon

Respostas:

266

Qualquer atributo pode ser aplicado ao tamanho horizontal ou vertical do View (controle visual). É usado para definir um tamanho de Visualização ou Layouts com base no conteúdo ou no tamanho do layout pai, em vez de especificar explicitamente uma dimensão.

fill_parent(descontinuado e renomeado MATCH_PARENTno nível 8 da API e superior)

Definir o layout de um widget como fill_parent forçará a expansão para ocupar o espaço disponível no elemento de layout em que foi colocado. É aproximadamente equivalente a definir o estilo de dock de um Controle de Formulário do Windows Fill.

A configuração de um layout ou controle de nível superior como fill_parent forçará a exibição da tela inteira.

wrap_content

Definir o tamanho de uma visualização como wrap_content forçará a expansão apenas o suficiente para conter os valores (ou controles filho) que ela contém. Para controles - como caixas de texto (TextView) ou imagens (ImageView) - isso envolverá o texto ou a imagem exibida. Para elementos de layout, ele será redimensionado para caber nos controles / layouts adicionados como filhos.

É aproximadamente o equivalente a definir a Autosizepropriedade de um Controle de Formulário do Windows como True.

Documentação Online

Há alguns detalhes na documentação do código do Android aqui .

Reto Meier
fonte
12
e se a largura da imagem for maior que a largura da tela e eu definir a largura da visualização de imagem como fill_parent. a imagem será compactada no tamanho da tela?
31512 John Watson
@JohnWatson encontrou sua resposta? Eu também estou curioso.
Rachael
É bom conhecer as propriedades equivalentes do Windows Form Control mencionadas.
Rempelos
O que você viu @JohnWatson? Qual é a sua história? Qual é a resposta ?
que você
36

fill_parent(descontinuado) =match_parent
A borda da visualização filho se expande para corresponder à borda da visualização pai.

wrap_content
A borda da exibição filho envolve confortavelmente seu próprio conteúdo.

Aqui estão algumas imagens para tornar as coisas mais claras. O verde e o vermelho são TextViews. O branco é uma LinearLayoutdemonstração.

insira a descrição da imagem aqui

Todo View(a TextView, an ImageView, a Button, etc.) precisa definir o widthe o heightda exibição. No arquivo de layout xml, pode ser assim:

android:layout_width="wrap_content"
android:layout_height="match_parent"

Além de definir a largura e a altura como match_parentou wrap_content, você também pode defini-los com algum valor absoluto:

android:layout_width="100dp"
android:layout_height="200dp"

Geralmente, isso não é tão bom, porque não é tão flexível para dispositivos de tamanhos diferentes. Depois de entender wrap_contente match_parent, a próxima coisa a aprender é layout_weight.

Veja também

XML para imagens acima

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

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

Nota

A explicação nesta resposta assume que não há margem ou preenchimento . Mas, mesmo que exista, o conceito básico ainda é o mesmo. A borda / espaçamento da vista é apenas ajustada pelo valor da margem ou preenchimento.

Suragch
fonte
9
  • fill_parent fará com que a largura ou altura do elemento seja tão grande quanto o elemento pai, ou seja, o contêiner.

  • wrap_content fará com que a largura ou a altura sejam tão grandes quanto necessárias para conter os elementos dentro dela.

Clique aqui para referência do ANDROID DOC

Devrath
fonte
qual será o contêiner? como cercar as vistas com diferentes recipientes?
Tejzeratul
2

fill_parent :

Um componente é organizado e o layout fill_parentserá obrigatório para expandir para preencher os membros da unidade de layout, tanto quanto possível no espaço. Isso é consistente com a propriedade dockstyle do controle do Windows. Um layout ou controle superior definido fill_parento forçará a ocupar a tela inteira.

wrap_content

Configurar uma visualização do tamanho de wrap_contentserá forçado a visualizar é expandido para mostrar todo o conteúdo. Os controles TextView e ImageView , por exemplo, estão configurados para wrap_contentexibir todo o texto e imagem internos. Os elementos do layout alteram o tamanho de acordo com o conteúdo. Configure uma exibição do tamanho do atributo Autosize wrap_contentaproximadamente equivalente a definir um controle do Windows para True.

Para obter detalhes, confira este link: http://developer.android.com/reference/android/view/ViewGroup.LayoutParams.html

IntelliJ Amiya
fonte