# 4. Работа ViewGroup Снова про `root` класс для всех виджетов. # View Android SDK включает множество виджетов, которые являются дочерним классом класса `View`. Таким образом, каждый виджет является экземпляром класса `View`, как и отражено на рисунке ниже. ![alt text](https://github.com/sibsutisTelecomDep/blog/blob/main/book/figures/android/android_class_hierarchy_view.svg?raw=true ) Рис. 1. Иерархия класса `View`. [Источник изображения](https://www.mathematik.uni-marburg.de/~thormae/lectures/graphics1/media/vectorart/android_class_hierarchy_view.svg). # ViewGroup Макет определяет структуру пользовательского интерфейса в вашем приложении, например в [действии](https://developer.android.com/guide/components/activities?hl=ru) . Все элементы макета построены с использованием иерархии объектов [View](https://developer.android.com/reference/android/view/View?hl=ru) и [ViewGroup](https://developer.android.com/reference/android/view/ViewGroup?hl=ru) . `View` обычно рисует то, что пользователь может видеть и с чем может взаимодействовать. `ViewGroup` — это невидимый контейнер, определяющий структуру макета для `View` и других объектов `ViewGroup` , как показано на рисунке 1. ![](https://developer.android.com/static/images/viewgroup_2x.png?hl=ru) **Рисунок 1.** Иллюстрация иерархии представлений, определяющей макет пользовательского интерфейса. Объекты `View` часто называются **_виджетами_** и могут быть одним из многих подклассов, таких как [Button](https://developer.android.com/reference/android/widget/Button?hl=ru) или [TextView](https://developer.android.com/reference/android/widget/TextView?hl=ru) . Объекты `ViewGroup` обычно называются **_макетами_** и могут относиться к одному из многих типов, предоставляющих другую структуру макета, например [LinearLayout](https://developer.android.com/reference/android/widget/LinearLayout?hl=ru) или [`ConstraintLayout`](https://developer.android.com/reference/androidx/constraintlayout/widget/ConstraintLayout?hl=ru) . Объявить макет можно двумя способами: - **Объявляйте элементы пользовательского интерфейса в XML.** Android предоставляет простой словарь XML, соответствующий классам и подклассам `View` , например, для виджетов и макетов. Вы также можете использовать [редактор макетов](https://developer.android.com/studio/write/layout-editor?hl=ru) Android Studio для создания макета XML с помощью интерфейса перетаскивания. - **Создание экземпляров элементов макета во время выполнения.** Ваше приложение может создавать объекты `View` и `ViewGroup` и программно управлять их свойствами. **Совет:** Для отладки макета во время выполнения используйте инструмент [«Инспектор макета»](https://developer.android.com/studio/debug/layout-inspector?hl=ru) . ## XML Используя словарь XML Android, вы можете быстро разрабатывать макеты пользовательского интерфейса и элементы экрана, которые они содержат, точно так же, как вы создаете веб-страницы в HTML с рядом вложенных элементов. Каждый файл макета должен содержать ровно один корневой элемент, который должен быть объектом `View` или `ViewGroup` . После определения корневого элемента вы можете добавить дополнительные объекты или виджеты макета в качестве дочерних элементов, чтобы постепенно построить иерархию `View` , определяющую ваш макет. Например, вот макет XML, в котором используется вертикальный `LinearLayout` для хранения `TextView` и `Button` : ```xml