реклама
Бургер менюБургер меню

Иван Трещев – Программирование для мобильных платформ. Android. Для студентов технических специальностей (страница 3)

18

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

Давайте разберемся, что мы будем использовать при разработке.

Папка src хранит в себе пакеты классов исполняемого кода. Это могут быть и классы активностей и простые классы Java, которые понадобятся нам для выполнения приложения, и многие другие классы.

Изначально создан всего один пакет, имя которого мы присвоили при создании проекта. В нем содержится наша активность, если конечно мы ее создали при создании проекта. Класс новой помещается в этот же пакет.

Далее папка res. В ней содержаться все ресурсы нашего приложения. Это могут быть и картинки, и layout-файлы, и файлы анимации, и константные ресурсы и многое другое. Для каждого вида ресурса (например анимации или изображения) создается своя папка. Некоторые ресурсы уже были созданы средой разработки при создании проекта, а некоторые придется создавать нам самим.

Стоит обратить внимание на то, в проекте несколько папок drawable, каждая из которых имеет свой уникальный постфикс. В этих папках хранятся изображения, используемые в проекте. Создано это для того, чтобы адаптировать изображения под разные разрешения или размеры экрана. Однако если вы не собираетесь этого делать, достаточно скопировать изображение в одну из папок drawable, качество картинки может ухудшиться. Если же вы хотите, чтобы качество гарантировано не страдало при переносе с одного экрана на другой, то вам придется создать каждую картинку с разными разрешениями, присвоить для каждого файла одно имя и скопировать их в папки соответствующих указанному разрешению.

Далее папка gen. В ней хранятся id для наших ресурсов. В этой папке могут хранится несколько пакетов, нам нужен тот, чью имя совпадает с именем пакета проекта. В нем хранится файл (класс) R. java. В нем созданы вложенные классы, которые содержат id ресурсов. Имя вложенного класса совпадает с именем папки ресурса. Именно через id и происходит взаимодействие между ресурсами и исполняемым кодом. То есть в коде через id можно получить наш ресурс и далее уже делать с ним все, что нам необходимо: изменять размеры, менять текст, удалять и т.д.. Хочу отметить, что при создании ресурса и присвоении ему id, если это требуется, в класс R среда автоматически поместит id этого ресурса, однако на практике иногда бывает так, что id не создается, в этом случае нам придется самим его создавать, это совсем не трудно.

Еще один файл, располагающий в корне проекта, это AndroidManifest. xml, он представляет собой файл XML. В него записываются все свойства и параметры нашего приложения и отдельной активности в частности. В нем указано какая активность должна запуститься первой, разрешения на использования некоторых функций устройства (интернет, Bluetooth и т.д.), стиль нашего приложения, его имя и другие параметры.

4 Ресурсы

Так как ресурсов в Android много, хотелось бы рассказать о них подробней.

И итак Android выделяет несколько видов ресурсов. Из них: изображения, layout-файлы, анимации, меню, строковые ресурсы и другие. Рассмотрим лишь те, которые мы будем использовать на начальном этапе.

Первый и самый главный ресурс это layout-файл, в дальнейшем буду называть слой.

Слой представляет собой файл xml. Он является элементом пользовательского интерфейса. Создается с помощью языка разметки xml. По сути дела в нем программист определяет и размечает пользовательский интерфейса (размеры составных элементов, их расположение и т.д.).

Изображение. Изображения располагаются в папка drawable. В drawable хранятся все изображения, используемые в приложении, в том числе и иконки. Поддерживаемые форматы файлов изображений: PNG (предпочтительный), JPG и GIF.

Стоит обратить внимание на то, в проекте несколько папок drawable, каждая из которых имеет свой уникальный постфикс. Создано это для того, чтобы адаптировать изображения под разные разрешения или размеры экрана. Однако если вы не собираетесь этого делать, достаточно скопировать изображение в одну из папок drawable, качество картинки может ухудшиться. Если же вы хотите, чтобы качество гарантировано не страдало при переносе с одного экрана на другой, то вам придется создать каждую картинку с разными разрешениями, присвоить для каждого файла одно имя и скопировать их в папки соответствующих указанному разрешению.

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

5 Запуск приложения

И так, допустим, что вы довольно долго разрабатывали свое приложение и хотите увидеть результаты. Нам необходимо запустить свое приложение. Для этого выделим его корневую папку и кликнем на кнопку Run.

Далее у нас появится следующее окно:

Нажимаем Ok. После этого появится окно, где вы можете выбрать на каком устройстве выполнить запуск. В верхнем листе записаны все реальные устройства подключенные к ПК и настроенные должным образом (включена отладка на устройстве), в нижнем листе – все виртуальные устройства, созданные вами. Вы можете выбрать любое и нажать на запуск.

Далее произойдет запуск на устройстве. Если вы выбрали виртуальную машину, то скорее всего вам придется подождать пока она включится, повторные запуске на виртуальных машинах будут производится намного быстрее, поэтому если вам требуется неоднократно запускать проект, не закрывайте окно виртуальной машины. Можно так же запустить один проект на нескольких устройствах, в том числе и на реальных, и виртуальных, для этого достаточно при каждом запуске выбирать разные варианты. Если вы выбрали устройство, на котором уже запущено приложение, то произойдет перезапуск.

Декларативный способ создания экранных элементов

Структура приложения

Если проводить аналогию с Windows, то приложение состоит из окон, называемых Activity. В конкретный момент времени обычно отображается одно Activity и занимает весь экран, а приложение переключается между ними. В качестве примера можно рассмотреть почтовое приложение. В нем одно Activity – список писем, другое – просмотр письма, третье – настройки ящика. При работе вы перемещаетесь по ним.

Содержимое Activity формируется из различных компонентов, называемых View. Самые распространенные View – это кнопка, поле ввода, чекбокс и т. д.

Примерно это можно изобразить так:

Необходимо заметить, что View обычно размещаются в ViewGroup. Самый распространенный пример ViewGroup – это Layout. Layout бывает различных типов и отвечает за то, как будут расположены его дочерние View на экране (таблицей, строкой, столбцом и т.д.).

ViewGroup можно рассматривать как контейнер View элементов (дочерних), в этом контейнере элементы хранятся согласно поведению и структуре, который присущ данной ViewGroup. ViewGroup можно назвать родительским элементом, для View, которые хранятся в нем, а сами View – дочерними для этого ViewGroup.

И так нам интересен layout-файл, он располагается в папке res -> layout.

Открываем его и видим следующее:

Это макет нашего экрана, именно это увидит пользователь когда приложение запустит данный layout-файл. А так как этот слой отобразится первым, то соответственно это первое что увидит пользователь в вашем приложении. Стоит отметить что порядок отображения слоев должно регулироваться исполняемым кодом. То есть именно программист при создании приложения должен определять когда и при каких обстоятельствах отобразится данный слой.

Слева мы видим набор View-элементов укомплектованные в иерархии. Если мы перетащим какой-нибудь элемент на наш слой, то он автоматически добавится в наш layout-файл.

Справа в верхнем углу видим логическую структуру нашего слоя, давайте разберемся с этим подробнее. И так наш layout-файл имеет корневой слой RelativeLaoyt (один из видов слоев), в данном случаем слой является элементом ViewGroup. Стоит понимать разницу между layout-файлом (файлом разметки) и layout (слоем). Первое это наш экран, вторым можно назвать View-элемент, хотя это не совсем так, как было сказано layout (слой) – это элемент ViewGroup. Любой layout-файл имеет свой корневой слой, в этом слое хранятся дочерние элементы, согласно правилам этого слоя. При создании проекта у нас уже добавился автоматически дочерний View – TextView с надписью: «Hello world».

Как вы уже, наверное, в наборе View, расположенной слева, есть иерархия Layouts.

В этой иерархии хранятся все виды слоев. Вы можете перетащить любой из них на ваш корневой layout. В этом случае корневой слой будет считаться родительским, а слой, который мы добавили – дочерний. Дочерний слой будет принимать те правила существования, которые присущи его родительскому слою. В то же время, если мы добавим в созданный слой какой-нибудь элемент (другой слой или просто элемент View), то этот элемент будет уже дочерним и будет принимать правила уже созданного поверх корневого слоя, а не самого корневого слоя. То есть суть в том, что дочерний элемент существует согласно поведению, которое диктует родительский.