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

Ресурс макета определяет архитектуру пользовательского интерфейса в 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 , как показано в предыдущем примере синтаксиса.

элементы:
<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 . Дополнительные сведения об объединении макетов см. в статье Повторное использование макетов с помощью <include> .

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

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

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

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

Котлин

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

Ява

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

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

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

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

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

Ценить Описание
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() :

Котлин

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

Ява

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main_activity);
}
см. также: