Ресурс разметки

Ресурс разметки определяет архитектуру пользовательского интерфейса в Activity или компоненте пользовательского интерфейса.

местоположение файла;
res/layout/filename.xml
Название файла используется в качестве идентификатора ресурса.
скомпилированный тип данных ресурса:
Указатель на ресурс View (или подкласс)
ссылка на ресурс:
В Java: R.layout.filename
В XML: @[package:]layout/filename
Синтаксис:
<?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>

Примечание. Корневым элементом может быть ViewGroup, View или <merge>, но он должен быть только один и содержать атрибут xmlns:android с пространством имен android, как показано в примере синтаксиса выше.

elements:
<ViewGroup>
Контейнер для других элементов View. Существует множество различных типов объектов ViewGroup, и каждый из них позволяет по-разному задавать макет дочерних элементов. Существуют разные типы объектов ViewGroup, в том числе LinearLayout, RelativeLayout и FrameLayout.

Не думайте, что любая производная от ViewGroup принимает вложенные представления. Некоторые группы представлений являются реализациями класса AdapterView, который определяет дочерние элементы только на основе Adapter.

Атрибуты:

android:id
Идентификатор ресурса. Уникальное название ресурса для элемента, которое можно использовать для получения ссылки на ViewGroup из приложения. Подробную информацию вы найдете в разделе Значение для android:id.
android:layout_height
Параметр или ключевое слово. Обязательный параметр. Высота группы, заданная в виде значения размера (или ресурса размера) или ключевого слова ("match_parent" или "wrap_content"). Подробную информацию можно найти в разделе Значения для android:layout_height и android:layout_width.
android:layout_width
Параметр или ключевое слово. Обязательный параметр. Ширина группы, заданная в виде значения параметра (или ресурса параметра) или ключевого слова ("match_parent" или "wrap_content"). Подробную информацию можно найти в разделе Значения для android:layout_height и android:layout_width.

Базовый класс ViewGroup поддерживает больше атрибутов, а каждая реализация ViewGroup – ещё больше. Чтобы посмотреть все доступные атрибуты, ознакомьтесь с документацией по соответствующему классу ViewGroup, например XML-атрибуты LinearLayout.

<View>
Отдельный компонент интерфейса, обычно называемый виджетом. Существуют разные типы объектов View, например TextView, Button и CheckBox.

Атрибуты:

android:id
Идентификатор ресурса. Уникальное название ресурса для элемента, которое можно использовать для получения ссылки на View из приложения. Подробную информацию вы найдете в разделе Значение для android:id.
android:layout_height
Параметр или ключевое слово. Обязательный параметр. Высота элемента, заданная как значение размера (или ресурс размера) или ключевое слово ("match_parent" или "wrap_content"). Подробную информацию можно найти в разделе Значения для android:layout_height и android:layout_width.
android:layout_width
Параметр или ключевое слово. Обязательный параметр. Ширина элемента, заданная как значение размера (или ресурс размера) или ключевое слово ("match_parent" или "wrap_content"). Подробную информацию можно найти в разделе Значения для android:layout_height и android:layout_width.

Базовый класс View поддерживает больше атрибутов, а каждая реализация View – ещё больше. Подробнее о макетах… Чтобы посмотреть все доступные атрибуты, ознакомьтесь с соответствующей справочной документацией, например XML-атрибутами TextView.

<requestFocus>
Этот пустой элемент может быть включен в любой элемент, представляющий объект View. Он позволяет установить начальный фокус на родительском элементе. В одном файле может быть только один такой элемент.
<include>
Включает файл макета в этот макет.

Атрибуты:

layout
Ресурс разметки. Обязательный параметр. Ссылка на ресурс разметки.
android:id
Идентификатор ресурса. Переопределяет идентификатор, присвоенный корневому представлению во включенном макете.
android:layout_height
Параметр или ключевое слово. Переопределяет высоту, заданную для корневого представления во включенном макете. Действует, только если также объявлено android:layout_width.
android:layout_width
Параметр или ключевое слово. Переопределяет ширину, заданную для корневого представления во включенном макете. Действует, только если также объявлено android:layout_height.

Вы можете включить в <include> любые другие атрибуты макета, которые поддерживаются корневым элементом во включенном макете, и они переопределят атрибуты, определенные в корневом элементе.

Внимание! Если вы хотите переопределить атрибуты макета с помощью тега <include>, вам нужно переопределить и android:layout_height, и android:layout_width, чтобы другие атрибуты макета вступили в силу.

Другой способ включить макет – использовать ViewStub, облегченное представление, которое не занимает места в макете, пока вы не развернете его. При этом он включает файл макета, определенный атрибутом android:layout. Дополнительную информацию об использовании ViewStub можно найти в статье Загрузка представлений по запросу.

<merge>
Альтернативный корневой элемент, который не отображается в иерархии макета. Использовать его в качестве корневого элемента удобно, если вы знаете, что этот макет помещен в макет, который уже содержит соответствующий родительский элемент View для дочерних элементов <merge>.

Это особенно полезно, если вы планируете включить этот макет в другой файл макета с помощью <include> и этому макету не требуется другой контейнер ViewGroup. Подробнее об объединении макетов…

Значение для android:id

Для значения идентификатора обычно используется следующий синтаксис: "@+id/name", как показано в примере ниже. Символ плюса (+) указывает на то, что это новый идентификатор ресурса, и инструмент aapt создает новое целое число ресурса в классе R.java, если оно ещё не существует.

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

Название nameTextbox теперь является идентификатором ресурса, прикрепленным к этому элементу. Затем вы можете сослаться на TextView, с которым связан идентификатор в Java:

Kotlin

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

Java

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

Этот код возвращает объект TextView.

Однако если вы уже определили ресурс идентификатора и он ещё не используется, то можете применить этот идентификатор к элементу View, исключив символ плюса в значении android:id.

Значения для android:layout_height и android:layout_width

Значения высоты и ширины выражаются в любых единицах измерения, поддерживаемых Android (px, dp, sp, pt, in, mm), или с помощью следующих ключевых слов:

ЗначениеОписание
match_parent Размер элемента будет соответствовать размеру родительского элемента. Добавлено на уровне API 8, чтобы прекратить поддержку fill_parent.
wrap_content Размер элемента будет соответствовать размеру его контента.

Элементы специального представления

Вы можете создавать собственные элементы View и ViewGroup и применять их к макету так же, как и стандартные элементы. Вы также можете указать атрибуты, поддерживаемые в элементе XML. Подробнее о том, как создавать специальные компоненты просмотра…

пример:
XML-файл сохранен в 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>

Этот код приложения загружает макет для Activity в методе 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);
}
См. также: