Журнал / польза

Разработка приложений под Android: основы View

Что такое класс View, из каких компонентов он состоит и как с его помощью собрать интерфейс приложения.

Графический интерфейс строится из набора компонентов, каждый из которых может иметь различные состояния и форму. Интерфейс Android-устройств — не исключение. Базовым для всех визуальных элементов является класс View. С помощью него и его наследников можно написать желаемый пользовательский интерфейс и настроить взаимодействие с пользователем.

По следам лекции Александра Смилянского, разработчика команды мобильных Карт и Навигатора Яндекса, для Школы мобильной разработки мы составили памятку по работе с View и его наследниками. 

Элементы интерфейса

Основные элементы пользовательского интерфейса представлены текстовыми полями, кнопками, картинками, слайдерами и другими компонентами. В Android для них используются классы TextView, Button, ImageView и ProgressBar. Это далеко не единственные наследники класса View, но одни из наиболее часто используемых стандартных компонентов.

Чтобы компоненты отображались корректно, необходимо задать им параметры. Сделать это можно как с помощью объекта в Java или Kotlin, так и в XML.

Размеры элементов и отступы

Чтобы задать параметр, нужно понимать, в чём он измеряется. Например, есть несколько единиц измерения размера текста: 

— px — размер в пикселях;

— dp (density-independent-pixels) позволяет задавать размер текста одинаково для всех устройств, независимо от разрешения и размера экрана;

— sp (scalable pixels) работает схожим образом, что и dp, но дополнительно проверяет настройки устройства. Если пользователь задал в настройках увеличение текста, то параметр также будет его увеличивать. Это позволяет сделать приложение более доступным и удобным для людей с нарушениями зрения, но в отдельных случаях может повлиять на макет, поэтому использование sp надо тщательно тестировать.

Размеры элемента задаются следующими единицами измерения:

— match_parent — элемент займёт всё место родительского компонента;

— wrap_content — элемент займет только необходимое для него место;

— 0dp — специальный размер, позволяющий задать динамический размер в отдельных случаях.

Кроме того, можно указать размер в px или dp.

Отступ элементов можно задавать с помощью параметров padding и layout_margin:

— padding определяет внутренние отступы элемента, которые позволяют его расширить, подвинув другие элементы;

— layout_margin определяет внешние отступы от элемента, при этом сам элемент не меняется в размерах.

Группировка элементов

Для группировки элементов интерфейса используются контейнеры — наследники класса ViewGroup. Контейнеры определяют расположение и размер дочерних объектов View. Чаще всего используются следующие контейнеры: FrameLayout, LinearLayout и ConstraintLayout.

FrameLayout — самый легковесный контейнер. Он используется для вывода на экран одного визуального элемента, а также для расположения элементов с gravity-атрибутами (сверху или снизу экрана). Также с помощью FrameLayout удобно создавать другие контейнеры, как это сделано, например, в ScrollView.

LinearLayout используется для вывода на экран списков. Он располагает элементы по горизонтали или по вертикали. 

ConstraintLayout позволяет задавать расположение элементов относительно друг друга. Используется в сложных интерфейсах, где много связанных между собой компонентов. 

RecyclerView

Расположить большое количество элементов интерфейса на экране проблематично. Ведь данные имеют свойство обновляться, а их одновременное отображение может потребовать больших ресурсов. 

На помощь приходит RecyclerView. Эта библиотека предоставляет гораздо больше возможностей, чем стандартные контейнеры: в ней доступно более 30 классов и интерфейсов. RecyclerView позволяет динамически создавать и обновлять элементы, настроить анимации их изменений и многое другое. 

В отличие от LinearLayout, в RecyclerView доступна ограниченная загрузка элементов: то есть они отрисовываются не сразу, а по ходу того, как появляются на экране. Это даёт ощутимый прирост производительности приложения.

Подробнее о том, как работать с RecyclerView в реальных проектах, смотрите в видеоуроке старшего разработчика команды мобильных Карт Сергея Кришталя для Школы мобильной разработки, которая прошла в 2021 году.

Присоединяйтесь к Открытому лекторию Летних школ Академии Яндекса и узнайте о других современных инструментах мобильной разработки.