Recurso de layout

Um recurso de layout define a arquitetura da interface em uma Activity ou um componente de uma interface.

Localização do arquivo:
res/layout/filename.xml
O nome do arquivo é usado como ID de recurso.
Tipo de dados do recurso compilado:
Ponteiro de recurso para um recurso View (ou subclasse).
referência de recurso:
Em Java: R.layout.filename
Em XML: @[package:]layout/filename
sintaxe:
<?xml version="1.0" encoding="utf-8"?>
<ViewGroup
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@[+][package:]id/resource_name"
    android:layout_height=["dimension" | "match_parent" | "wrap_content"]
    android:layout_width=["dimension" | "match_parent" | "wrap_content"]
    [ViewGroup-specific attributes] >
    <View
        android:id="@[+][package:]id/resource_name"
        android:layout_height=["dimension" | "match_parent" | "wrap_content"]
        android:layout_width=["dimension" | "match_parent" | "wrap_content"]
        [View-specific attributes] >
        <requestFocus/>
    </View>
    <ViewGroup >
        <View />
    </ViewGroup>
    <include layout="@layout/layout_resource"/>
</ViewGroup>

Observação: o elemento raiz pode ser um elemento ViewGroup, View ou <merge>, mas é necessário que exista apenas um elemento raiz, e ele precisa conter o atributo xmlns:android com o namespace android, conforme mostrado no exemplo de sintaxe anterior.

Elementos:
<ViewGroup>
Um contêiner para outros elementos View. Há diferentes tipos de objetos ViewGroup, e cada um permite especificar o layout dos elementos filhos de maneiras diferentes. Diferentes tipos de objetos ViewGroup incluem LinearLayout, RelativeLayout e FrameLayout.

Não presuma que qualquer derivação de ViewGroup aceita visualizações aninhadas. Algumas visualizações em grupo são implementações da classe AdapterView, que determina os filhos somente de um Adapter.

Atributos:

android:id
ID de recurso. Um nome de recurso exclusivo para o elemento que pode ser usado para acessar uma referência para o ViewGroup do seu aplicativo. Para saber mais, consulte a seção Valor de android:id.
android:layout_height
Dimensão ou palavra-chave. Obrigatório. A altura do grupo, como um valor de dimensão (ou recurso de dimensão) ou uma palavra-chave ("match_parent" ou "wrap_content"). Para saber mais, consulte a seção Valores de android:layout_height e android:layout_width:.
android:layout_width
Dimensão ou palavra-chave. Obrigatório. A largura do grupo, como um valor de dimensão (ou recurso de dimensão) ou uma palavra-chave ("match_parent" ou "wrap_content"). Para saber mais, consulte a seção Valores de android:layout_height e android:layout_width.

A classe de base ViewGroup oferece suporte a mais atributos, e muitos outros têm suporte de cada implementação do ViewGroup. Para conferir uma referência de todos os atributos disponíveis, consulte a documentação de referência correspondente para a classe ViewGroup, por exemplo, Atributos LinearLayout XML.

<View>
Um componente de interface individual, geralmente conhecido como widget. Diferentes tipos de objetos View incluem TextView, Button e CheckBox.

Atributos:

android:id
ID de recurso. Um nome de recurso exclusivo para o elemento que pode ser usado para acessar uma referência à View do seu aplicativo. Para saber mais, consulte a seção Valor de android:id.
android:layout_height
Dimensão ou palavra-chave. Obrigatório. A altura do elemento, como um valor de dimensão (ou recurso de dimensão) ou uma palavra-chave ("match_parent" ou "wrap_content"). Para saber mais, consulte a seção Valores de android:layout_height e android:layout_width.
android:layout_width
Dimensão ou palavra-chave. Obrigatório. A largura do elemento, como um valor de dimensão (ou recurso de dimensão) ou uma palavra-chave ("match_parent" ou "wrap_content"). Para saber mais, consulte a seção Valores de android:layout_height e android:layout_width.

A classe de base View oferece suporte a mais atributos, e muitos outros têm suporte de cada implementação do View. Para saber mais, consulte Layouts. Para conferir uma referência de todos os atributos disponíveis, consulte a documentação de referência correspondente, por exemplo, Atributos TextView XML.

<requestFocus>
Qualquer elemento que represente um objeto View pode incluir esse elemento vazio, o que dá foco inicial ao elemento pai na tela. Você pode ter apenas um desses elementos por arquivo.
<include>
Inclui um arquivo nesse layout.

Atributos:

layout
Recurso de layout. Obrigatório. Referência a um recurso de layout.
android:id
ID de recurso. Modifica o ID dado à visualização raiz no layout incluído.
android:layout_height
Dimensão ou palavra-chave. Substitui a altura atribuída à visualização raiz no layout incluído. Só vai ser eficaz se android:layout_width também for declarado.
android:layout_width
Dimensão ou palavra-chave. Substitui a altura atribuída à visualização raiz no layout incluído. Só será eficaz se android:layout_height também for declarado.

Você pode incluir qualquer outro atributo de layout no <include> que tenha suporte do elemento raiz no layout incluído. Eles vão substituir os definidos no elemento raiz.

Cuidado: se você quiser substituir os atributos de layout usando a tag <include>, substitua android:layout_height e android:layout_width para que outros atributos de layout sejam ativados.

Outra maneira de incluir um layout é usar ViewStub: uma visualização leve que não consome espaço de layout até ser explicitamente inflada. Quando você a infla, ela inclui um arquivo de layout definido pelo atributo android:layout. Para saber mais sobre o uso de ViewStub, consulte Carregar visualizações sob demanda.

<merge>
Um elemento raiz alternativo que não é mostrado na hierarquia de layout. Usá-lo como elemento raiz é útil quando você sabe que ele será colocado em um layout que já tem a View mãe adequada para conter os filhos do elemento <merge>.

Isso é útil principalmente quando você planeja incluir esse layout em outro arquivo usando <include> e ele não exige um contêiner ViewGroup diferente. Para saber mais sobre a mesclagem de layouts, consulte Reutilizar layouts com <include>.

Valor de android:id

Para o valor do ID, use este formulário de sintaxe: "@+id/name", conforme mostrado no exemplo a seguir. O sinal de adição, +, indica que esse é um novo ID de recurso, e a ferramenta aapt cria um número inteiro do novo recurso na classe R.java, se ainda não houver um.

<TextView android:id="@+id/nameTextbox"/>

O nome nameTextbox agora é um ID de recurso anexado a este elemento. Em seguida, você pode consultar a TextView a que o ID está associado em Java:

Kotlin

val textView: TextView? = findViewById(R.id.nameTextbox)

Java

TextView textView = findViewById(R.id.nameTextbox);

Esse código retorna o objeto TextView.

No entanto, se você já tiver definido um recurso de ID e ele ainda não tiver sido usado, ative esse ID em um elemento View, excluindo o símbolo de adição no valor android:id.

Valores de android:layout_height e android:layout_width:

Os valores de altura e largura são expressos usando qualquer uma das unidades de dimensão com suporte no Android (px, dp, sp, pt, in, mm) ou com as seguintes palavras-chave:

ValorDescrição
match_parent Define a dimensão que corresponde à dimensão do elemento pai. Adicionado no nível 8 da API para descontinuar o uso de fill_parent.
wrap_content Ajusta a dimensão ao tamanho necessário para adequar o conteúdo desse elemento.

Elementos de visualização personalizados

Você pode criar e ativar elementos View e ViewGroup personalizados da mesma forma que um elemento de layout padrão. Você também pode especificar os atributos aceitos no elemento XML. Para saber mais, consulte Criar componentes de visualização personalizados.

exemplo:
Arquivo XML salvo em res/layout/main_activity.xml:
<?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:orientation="vertical" >
    <TextView android:id="@+id/text"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:text="Hello, I am a TextView" />
    <Button android:id="@+id/button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Hello, I am a Button" />
</LinearLayout>

Esse código de aplicativo carrega o layout para um Activity no método onCreate():

Kotlin

public override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.main_activity)
}

Java

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main_activity);
}
Consulte também: