Управление интерфейсом из Java-кода

Разработка под Android требует умения создавать интерфейсы, которые будут симпатичны и просты в использовании. Удобство использования часто называют user-friendly.

Для создания визуальной части приложения в Android-разработке используются XML-файлы разметки. После этого элементами интерфейса можно управлять из Java-кода. В этой статье мы подробно рассмотрим, как это делается.

Связь Java-класса Activity и XML-layout

XML-файлы разметки – это способ определения структуры интерфейса приложения. Они содержат описания элементов пользовательского интерфейса, таких как кнопки, текстовые поля, изображения и другие. В таких файлах вся информация описывается при помощи тегов, заключённых в треугольные скобки.

Если заглянуть в XML-файл activity_main.xml, заботливо сгенерированный IntelliJ IDEA для MainActivity.java, там обнаружится компонент-контейнер ConstraintLayout. В нём пока ничего нет. Впоследствии в этот контейнер можно будет добавить разные компоненты.

ConstraintLayout – это один из видов Layout, рассказывающих приложению, как именно нужно располагать компоненты друг относительно друга. ConstraintLayout позволяет задавать связи между компонентами. Можно привязать верх кнопки к верху контейнера ConstraintLayout. Тогда кнопка будет наверху. А если привязать ещё и низ кнопки к низу контейнера, то кнопка будет в центре по вертикали, уравновешиваясь этими двумя связями.

Пустой интерфейс мобильного приложения в IntelliJ IDEA

Код activity_main.xml:

В Java-классе MainActivity устанавливается связь с файлом activity_main.xml при помощи метода setContentView(). Он задаёт, какой файл разметки будет использоваться в этой Activity в качестве интерфейса.

Получение ссылок на компоненты

Пока что в классе MainActivity пустовато. Там нет никаких компонентов. Ровно как и в activity_main.xml, если не считать одинокого ConstraintLayout. Давайте добавим пару компонентов. Откроем файл activity_main.xml и перейдём на вкладку Design.

Напишем симулятор школьной доски. Для этого понадобится добавить на экран 1 ImageView, 3 TextView, 2 EditText и 1 Button. Внесём их на экран из левой панельки:

Редактирование интерфейса мобильного приложения в IntelliJ IDEA

Пока что IntelliJ IDEA ругается, так как для компонентов не настроены привязки. Это нормально. Скоро мы их настроим в коде xml.

Для главной части приложения – школьной доски – нужно скачать картинку школьной доски из интернета. Затем её необходимо поместить по пути Название проекта -> app -> src -> main -> res -> drawable.

Теперь подготовки окончены и можно написать xml-код для правильной настройки компонентов:

Макет интерфейса для Android-приложения симулятора школьной доски

Результат получился выдающийся. Итого есть ImageView с картинкой доски, и на ней расположен TextView с уравнением. Под доской есть две пары TextViewEditText для ввода x и y соответственно. Внизу экрана расположена кнопка “Рассчитать” для расчёта уравнения.

Теперь на компоненты, которые мы добавили в activity_main.xml, нужно получить ссылки в классе MainActivity. Всего добавлено было 7 компонентов. Но давайте подумаем: а так ли нам нужно обращаться прямо ко всем из них? Да, менять текст на доске впоследствии придётся, равно как считывать ввод пользователя в двух текстовых полях (x и y). Также придётся обрабатывать нажатия кнопки. Но всё остальные компоненты нам больше никак не пригодятся. Они просто должны быть на экране. Это ImageView с картинкой школьной доски и два TextView: “x = ” и “y = “. На них мы ссылки получать не будем – это было бы излишне.

Зайдём в MainActivity.java. Нам предстоит создать поля для компонентов интерфейса и создать метод для их привязки к компонентам в activity_main.xml. Получать ссылки на компоненты интерфейса нужно методом findViewById().

Для начала в методе defineComponents() мы нашли главный Layout в activity_main.xmlConstraintLayout. И уже затем на этом ConstraintLayout-е мы находили все остальные нужные нам компоненты.

Вот мы и получили ссылки на компоненты интерфейса. Дальше будем решать, что с ними делать.

Обработка событий

Обработчики событий чаще всего добавляют на кнопки. Событие при этом – клик по кнопке. Так же поступим и мы – добавим обработку события “клик по кнопке“. Это делается следующим образом:

Добавим в класс MainActivity обработчик нажатия на кнопку.

Запустим приложение на телефоне. Интерфейс отображается корректно – всё на своих местах.

Если нажать кнопку “Рассчитать”, высветится уведомление “Кнопка была нажата!”. Причём это можно делать неограниченное количество раз: каждое нажатие на кнопку получит обработку и своё сообщение в уведомлении.

Такие же обработчики можно добавлять не только на кнопки. Можно добавить обработку клика по ImageView или TextView. Более того, типы событий бывают тоже разными. Мы рассматривали клик, но это может быть долгое нажатие, прокрутка, изменение текста (для EditText) и другие события.

Скриншот Android-приложения симулятора школьной доски с уведомлением "Кнопка была нажата!"

Изменение параметров компонентов

Чтобы обработать ввод x и y от пользователя и повлиять на отображаемое уравнение, нужно изменить параметры компонентов. Получить текст из EditText-а можно методом getText(). Установить текст на TextView можно методом setText(). Также необходимо добавить обработку случаев, когда пользователь вводит не целые числа. Для этого введём обработку исключения блоком try-catch. Итог:

Скриншот Android-приложения симулятора школьной доски с уведомлением "Введите целые числа"
Скриншот Android-приложения симулятора школьной доски с выведенным уравнением "18+7=25"

Теперь вы знаете, как управлять интерфейсом из Java-кода. Используйте метод findViewById() во благо. И пусть обработчики событий позволят вам создавать интерактивные предложения. Да пребудет с вами сила программирования!

Добавить комментарий