Введение в разработку Android-приложений
1.7. Виджеты
Виджет – это объект View, который служит интерфейсом для взаимодействия с пользователем. Иначе, виджеты – это обычные элементы управления: кнопки, текстовые поля, флажки, переключатели, списки.
Стандартные элементы имеют привычные свойства: ширина, высота, цвет и тому подобные. Еще два важных свойства, которые могут влиять на размер и положение дочерних элементов - важность (weight) и выравнивание (gravity). Weight используется для присвоения элементу показателя важности, отличающего его от других элементов, находящихся в контейнере. Предположим, в контейнере находится три элемента управления: первый имеет важность 1 (максимальное возможное значение), а два других имеют значение 0. В этом случае элемент управления, который имеет значение важности 1, займет в контейнере все свободное пространство. Gravity – это ориентация в контейнере. Например, необходимо выровнять текст надписи по правому краю, тогда свойство gravity будет иметь значение right. Набор значений для gravity ограничен: left, center, right, top, bottom, center_vertiсаl, сliр_horizontal и еще некоторые.
1.7.1. TextView
Виджет TextView предназначен для отображения текста без возможности редактирования его пользователем. TextView один из самых используемых виджетов. С его помощью пользователю удобнее ориентироваться в программе. По сути, TextView служит для представления пользователю описательного текста.
Атрибуты TextView:
- android:textsize – размер текста. При установке размера текста используются несколько единиц измерения: px (pixels), dp (density-independent pixels), sp (scale-independent pixels), in (inches), pt (points), mm (millimeters). Чтобы текст мог меняться в зависимости от выбора пользователя, используют единицы измерения sp.
- android:textstyle – стиль текста. Используются константы: normal, bold, italic.
- android:textcolor – цвет текста. Используются четыре формата в шестнадцатеричной кодировке: #RGB; #ARGB; #RRGGBB; #AARRGGBB, где R, G, B – соответствующий цвет, А – прозрачность (alpha-channel). Значение А, установленное в 0, означает прозрачность 100%.
Чтобы оживить текст, можно дополнительно задействовать атрибуты для создания эффектов тени: shadowColor (цвет тени), shadowDx (смещение тени по горизонтали), shadowDy (смещение по вертикали) и shadowRadius (ширина тени). Во время установки значений изменения не видны, необходимо запустить пример в эмуляторе или на устройстве.
Рассмотрим частую ошибку при попытке изменить фон элемента программным способом. Предположим, в ресурсах определен зеленый цвет:
<color name="tvBackground">#337700</color>
Следующий код будет ошибочным:
tv.setBackgroundColor(R.color.tvBackground);
Нужно так (два варианта):
tv.setBackgroundResource(R.color.tvBackground); tv.setBackgroundColor(getResources().getColor(R.color.tvBackground));
1.7.2. Button
Кнопка – один из самых распространенных элементов управления в программировании. Наследуется от Textview и является базовым классом для класса СompoundButton. От класса CompoundButton, в свою очередь, наследуются такие элементы как CheckBox, ToggleButton и RadioButton. На кнопке располагается текст и на кнопку нужно нажать, чтобы получить результат.
Если вы разместили на экране кнопку и будете нажимать на нее, то ничего не произойдет. Необходимо написать код, который будет выполняться при нажатии. Существует несколько способов обработки нажатий на кнопку. Относительно новый и простой для начинающего программиста способ – использовать атрибут onClick.
Иногда нужно сделать кнопку недоступной. Через XML нельзя сделать кнопку недоступной (нет подходящего атрибута). Это можно сделать программно через метод setEnable(). Как альтернативу можно рассмотреть атрибут android:clickable, который позволит кнопке не реагировать на касания, но при этом вид кнопки останется обычным.
1.7.3.Другие типы виджетов
- CheckBox является флажком, с помощью которого пользователь может отметить (поставить галочку) определенную опцию. Очень часто флажки используются в настройках, когда нужно выборочно выбрать определенные пункты, необходимые для комфортной работы пользователю.
- RadioButton. Главная особенность элемента RadioButton состоит в том, что он не используется в одиночестве. Всегда должно быть два и более переключателя и только один из них может быть выбранным.
- ToggleButton по своей функциональности похож на флажок (checkbox) или переключатель (radiobutton). Это кнопка, которая может находиться в одном из двух состояний: активна (On) или неактивна (Off).
- Switch – еще один вид переключателей, представляет собой полоску с двумя состояниями, переключиться между которыми можно сдвиганием ползунка.
- Spinner похож на выпадающий список. В закрытом состоянии элемент показывает одну строчку, при раскрытии выводит список в виде диалогового окна с переключателями.
- ProgressBar (индикатор прогресса) применяется в тех случаях, когда пользователю нужно показать, что программа не зависла, а выполняет продолжительную работу.
- SeekBar – обычный слайдер, чтобы пользователь мог передвигать ползунок пальцем на экране. Также можно передвигать ползунок с помощью клавиш-стрелок.
- RatingBar показывает значение рейтинга в виде звездочек. Можно установить рейтинг касанием пальца или с помощью клавиш курсора, используя заранее заданное количество звездочек.
Для виджета RatingBar используются следующие методы:
- setNumStart(int) – устанавливает число звездочек
- getRating() – возвращает значение рейтинга
- setRating(float) – устанавливает значение рейтинга
- setStepSize(float) – устанавливает шаг приращения рейтинга
1.7.4. Адаптеры
В Android часто используются адаптеры. Если говорить в общих чертах, то адаптеры упрощают связывание данных с элементом управления. Адаптеры используются при работе с виджетами: ListView, Spinner и другими.
ListAdapter наследует базовый класс Adapter и служит мостом между данными и ListView. Часто данные могут быть представлены курсорами, но необязательно. Удобство в том, что ListView может отображать любые данные, лишь бы они были завернуты в ListAdapter. ListAdapter имеет несколько подклассов (ArrayAdapter, BaseAdapter, CursorAdapter и другие), которые предназначены для различных целей.
- ArrayAdapter специально предназначен для работы с элементами списка. Он представляет данные в виде массива и добавляет удобный функционал для работы с ними (добавление, удаление, поиск).
- BaseAdapter – очень простой адаптер, обычно используется для заполнения списка статическими данными (которые могут быть взяты из ресурсов).
- CursorAdapter предоставляет данные для списка через курсор.
Эмулятор.
Эмулятор Android – это важный инструмент разработчика. Необходимо изучить его особенности и использовать его на начальном этапе разработки. Однако, следует помнить, что эмулятор лишь моделирует общее поведение реального устройства. Поэтому окончательное тестирование необходимо проводить на настоящем телефоне.
Эмулятор создается при помощи Android Virtual Device Manager (AVD Manager). Создавая новое виртуальное устройство, в окне свойств можно задать произвольное название для эмулятора, указать версию API и установить остальные параметры (например, разрешение, плотность пикселей на экране, емкость SD-карты и другие).
С помощью эмулятора можно иметь полноценный доступ к интернету, настраивать скорость и латентность соединения. Также можно имитировать входящие и исходящие телефонные звонки и SMS-сообщения. Но в то же время эмулятор не поддерживает виброзвонок, светодиоды, камеру, акселерометр и работу с компасом.
Теперь, когда известны основные принципы программирования для Android и создан эмулятор, можно приступать к написанию приложений.