Layout linear

LinearLayout é um grupo de visualizações que alinha todos os filhos em uma única direção vertical ou horizontal. Você pode especificar a direção do layout com o atributo android:orientation.

Observação: para melhorar o desempenho e a compatibilidade com as ferramentas, crie seu layout com o ConstraintLayout.

Todos os filhos de um LinearLayout são empilhados um após o outro. Portanto, uma lista vertical terá somente um filho por linha, independentemente da largura, e uma lista horizontal terá altura de apenas uma linha (a altura do filho mais alto, mais preenchimento). Um LinearLayout respeita margens entre filhos e a gravidade (alinhamento à direita, no centro ou à esquerda) de cada filho.

Ponderação do layout

LinearLayout também é compatível com a atribuição de uma ponderação a filhos individuais com o atributo android:layout_weight. Este atributo confere um valor de “importância” a uma visualização em relação à quantidade de espaço que ela deve ocupar na tela. Um valor de ponderação maior permite que ela se expanda para preencher qualquer espaço restante na visualização pai. As visualizações filhas podem especificar um valor de ponderação. Com isso, todo o espaço restante no grupo de visualizações será designado aos filhos na proporção da própria ponderação declarada. A ponderação padrão é zero.

Distribuição igual

Para criar um layout linear em que cada filho usa a mesma quantidade de espaço na tela, defina a android:layout_height de cada visualização como "0dp" (para um layout vertical) ou a android:layout_width como "0dp" (para um layout horizontal). Em seguida, defina a android:layout_weight de cada visualização como "1".

Distribuição desigual

Você também pode criar layouts lineares em que os elementos filhos usam diferentes quantidades de espaço na tela:

  • Se houver três campos de texto e dois deles tiverem uma ponderação 1, enquanto o outro não tiver ponderação, o terceiro campo de texto não será expandido. Em vez disso, esse terceiro campo de texto ocupará somente a área exigida pelo conteúdo. Os outros dois campos se expandirão igualmente para preencher o espaço restante depois que os três campos forem medidos.
  • Se houver três campos de texto e dois deles tiverem uma ponderação 1, enquanto o terceiro campo tiver uma ponderação 2 (em vez de 0), o último será declarado mais importante que os outros e ficará com metade do espaço total restante, enquanto os dois primeiros compartilharão o resto igualmente.

O snippet de código a seguir mostra como as ponderações de layout podem funcionar em uma atividade “enviar mensagem”. Cada campo Para, linha Assunto e botão Enviar ocupa somente a altura necessária. Essa configuração permite que a própria mensagem ocupe o restante da altura da atividade.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingLeft="16dp"
    android:paddingRight="16dp"
    android:orientation="vertical" >
    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="@string/to" />
    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="@string/subject" />
    <EditText
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:gravity="top"
        android:hint="@string/message" />
    <Button
        android:layout_width="100dp"
        android:layout_height="wrap_content"
        android:layout_gravity="right"
        android:text="@string/send" />
</LinearLayout>

Para ver detalhes sobre os atributos disponíveis para cada visualização filha de um LinearLayout, consulte LinearLayout.LayoutParams.