Евгений Сенько - Программирование приложений для мобильных устройств под управлением Android. Часть 1
Классы пользовательского интерфейса
В этой главе будет рассказано о классах, с помощью которых Android позволяет создавать пользовательский интерфейс приложений:
класс View (вью, на жаргоне – вьюшка) – основа для всего, что видно на экране устройства, а также различные события, которые вьюшки могут принимать;
высокоуровневые составные представления View Groups (группы вью), которые комбинируют несколько вьюшек, чтобы создать определенный вид или поведение;
некоторые определенные группы вью, в частности Adapter view (адаптер) и лейауты (layout);
Menu (меню) и Action Bar (панель действий), которые предоставляют пользователю легкий доступ к часто используемым функциям;
Dialogs (диалоговые окна), которые раскрываются на переднем плане приложения, чтобы информировать пользователя или получить от пользователя информацию.
В первую очередь пользовательский интерфейс (UI) – это место и средства, с помощью которых пользователь и приложение обмениваются информацией. Это визуальные элементы, которые пользователи видят и которых касаются на экране.
Android обеспечивает богатый набор классов, из которых разработчики могут создавать пользовательские интерфейсы. Начнем с классов View. Класс view – ключевой стандартный блок для компонентов UI. View занимают прямоугольное место на экране.
В Andriod имеется много предопределенных или предустановленных вьюшек. Давайте поговорим о некоторых из них. В частности о кнопках (button), переключателях (toggle button), чекбоксах (сheckbox) и других.
Вы видели уже много различных кнопок. Кнопка – это просто вьюшка, по которой пользователь может кликнуть, чтобы запустить или выполнить некоторое действие.
Давайте рассмотрим пример кнопки в приложении «UIButton». У него есть единственная кнопка внизу экрана, и эта кнопка подписана «Press me». И, если поддаться искушению и нажать на кнопку, то надпись на ней изменится. И теперь она гласит, что была нажата и сколько раз. И к настоящему времени вы, вероятно, уже можете предположить то, на что похож код для этого действия.
Код этой Activity создал объект-кнопку (button) и присоединил (setOnClickListener) «слушателя» этой кнопки. И каждый раз при нажатии на эту кнопку Android вызывает метод onClick «слушателя» кнопки (OnClickListener).
Следующая вьюшка называется ToggleButton (переключатель). Переключатель – это другой вид кнопки, однако имеет дополнительное свойство – когда вы нажимаете его, он остается нажатым, пока вы не нажмете его снова. Таким образом, переключатель всегда находится в одном из двух состояний – включено или выключено. Переключатели также обычно выводят на экран некоторый индикатор, чтобы сообщить пользователю, в каком положении находится кнопка в настоящее время.
Следующей view, о которой я буду говорить, является Checkbox (чекбокс, флажок, галочка). Используется, например, в анкете, где вы можете отметить и выбрать нужный пункт. Флажок – фактически просто другой вид кнопки с двумя состояниями, как переключатель. Основное различие в том, как он выглядит для пользователя. Флажки обычно изображаются в виде пустого квадратика, когда флажок не отмечен. И показывают галочку или символ «x», когда флажок находится в отмеченном состоянии. Код приложения для использования чекбокса аналогичен двум предыдущим.
И последняя view, о которой мы поговорим – AutoCompleteTextView. Это поле для ввода и редактирования текста с функцией автозавершения является немного более усовершенствованной разновидностью TextView (надпись или нередактируемый текст) и EditText (поле для ввода и редактирования текста). Автозавершение показывает пользователю список вариантов для ввода текста. И мы будем фильтровать этот список в зависимости от того, что вы вводите. И как только вы сузите список, вы сможете коснуться единственной записи, которая будет тогда помещена в текстовое поле.
Каждая вьюшка имеет множество свойств, которые разработчик может менять на свое усмотрение по своему вкусу. Например, вы можете установить непрозрачность или прозрачность, вы можете установить цвет фона, ориентацию на дисплее и многое другое.
Вьюшки обрабатывают события. И эти события могут происходить из различных источников, включая пользователя, когда он касается вьюшки или использует физические устройства ввода данных, такие как физическая клавиатура или геймпад. Android также может быть источником событий. Например, вьюшки получают вызовы различных методов, когда Android должен изменить местоположение или перерисовать вьюшку.
Самый распространенный способ обработать событие – это присоединить «слушателя» (listener) к вьюшке. Android определяет много различных видов интерфейсов «слушателя». И методы, определенные этими интерфейсами, будут вызваны каждый раз, когда произойдут определенные события с вьюшкой.
Например, класс View определяет интерфейс «слушателя» onClickListener, который имеет метод onClick. Этот метод вызывается каждый раз, когда по вьюшке кликнули.
Класс View также определяет «слушателя» длинного клика – onLongClickListener. Он имеет метод onLongClick, и этот метод вызывается каждый раз, когда вьюшку нажимают и удерживают нажатой в течение определенного промежутка времени.
Класс View также определяет «слушателя» изменения фокуса onFocusChangeListener. Он имеет метод onFocusChange, и этот метод вызывается, когда вьюшка получила или потеряла фокус. Также есть много других событий, которые вы также можете прослушивать.
До сих пор мы говорили главным образом об отдельных вью. Но в действительности, нам часто будут нужны составные вью, в которых соединены несколько отдельных вьюшек, чтобы обеспечить некоторую сложную функциональность. Простым примером является RadioGroup – по существу это ряд связанных флажков.
Например, у вас могло бы быть приложение, которое спрашивает пользователя, какого он возраста, и позволяет выбрать из ряда возрастных диапазонов: до 20, 20 – 34, 35 – 49, и более чем 50. Чтобы это реализовать, у вас был бы набор текстовых вью для всех различных возрастных диапазонов, и затем рядом с каждым текстовым вью вы поместили бы флажок. Но вы хотели бы удостовериться, что только один из флажков отмечается, потому что возрастные диапазоны, очевидно, являются взаимоисключающими.
Чтобы поддерживать такие сложные представления как это, у Android есть класс под названием ViewGroup – это невидимые группы, которые содержат другие вью. И таким образом, вы можете использовать их, чтобы сгруппировать и организовать по нескольку вьюшек. ViewGroup – базовый класс для контейнеров вью и лейаутов. Точно так же, как с простыми вью, Android обеспечивает много предопределенных групп вью. Это такие, как: RadioGroup, TimePicker, DatePicker, WebView, MapView, Gallery и Spinner. Давайте рассмотрим каждый из них по отдельности.
Давайте начнем с RadioGroup. Это ViewGroup, содержащий ряд взаимоисключающих флажков или переключателей. Таким образом, в любой момент может быть установлен только один из переключателей. Давайте посмотрим на пример приложения.
Приложение выводит на экран текстовое вью и RadioGroup. Текстовое вью выводит на экран текст «No Choice Made», поскольку прямо сейчас ни один из переключателей не установлен. Теперь выберем «Choice 1». Как видите, текст изменяется, чтобы отразить выбор, который был сделан. Теперь, если выбрать «Choice 2», «Choice 1» автоматически отменится, и будет выбран «Choice 2». И то же произойдет, если выбрать «Choice 3».
Следующий ViewGroup – TimePicker – позволяет пользователю выбирать и устанавливать определенное значение времени. Рассмотрим приложение «UITimePicker», которое выводит на экран текстовую вью, показывающую текущее время и кнопку, подписанную «Change the time». Если кликнуть по кнопке, появится средство выбора времени – TimePicker.
TimePicker составлен из многих различных вью, но вместе они позволяют пользователю независимо устанавливать час, минуты и a.m. или p.m. Есть также кнопка в нижней части, чтобы указать, что выбор сделан. Как только вы нажмете эту кнопку, текстовая вью изменится, чтобы показать время, которое только что выбрали.
Подобно TimePicker, есть также группа вью DatePicker. Эта ViewGroup позволяет пользователю выбирать определенную дату. Рассмотрим приложение «UIDatePicker». Приложение выводит на экран текстовую вью, показывающую текущую дату и кнопку, подписанную «Change the date». Таким образом, если кликнуть по кнопке, появится средство выбора даты DatePicker.
Средство выбора даты составлено из многих различных вью, которые вместе позволяют пользователю независимо устанавливать месяц, день и год. Также есть кнопка в нижней части, чтобы указать, что выбор сделан. Когда вы кликнете по этой кнопке, текстовая вью изменится, чтобы показать выбранную дату.
Следующая ViewGroup – это веб-представление WebView, которое выводит на экран веб-страницы. Вот приложение, которое загрузит и выведет на экран знакомую веб-страницу www.google.com.