Каждое приложение на Android содержит каталог для ресурсов res
и каталог для активов assets
. Реальное различие между ресурсами и активами заключается в следующем:
res
) делает их легкодоступными для использования в коде программы;
assets
(необработанный формат файла), необходимо использовать AssetManager
для чтения файла как потока байтов.
При запуске Android автоматически загрузит нужный ресурс, не требуя ни одной строчки кода.
Ресурсы в Android являются декларативными. В основном ресурсы хранятся в виде XML-файлов в каталоге res с подкаталогами values, drawable-ldpi, drawable-mdpi, drawable-hdpi, layout, но также бывают и другие типы ресурсов.
Для удобства система создает идентификаторы ресурсов и использует их в файле R.java
(класс R
, который содержит ссылки на все ресурсы проекта), что позволяет ссылаться на ресурсы внутри кода программы. Статический класс R генерируется на основе ваших заданных ресурсов и создается во время компиляции проекта. При создании класс содержит статические подклассы для всех типов ресурсов, для которых был описан хотя бы один экземпляр.
Так как файл R
генерируется автоматически, то не смысла его редактировать вручную, потому что все изменения будут утеряны при повторной генерации.
В общем виде ресурсы представляют собой файл (например, изображение) или значение (например, заголовок программы), связанные с создаваемым приложением. Удобств использования ресурсов заключается в том, что их можно изменять без повторной компиляции или новой разработки приложения. Имена файлов для ресурсов должны состоять исключительно из букв в нижнем регистре, чисел и символов подчеркивания.
Самыми распространенными ресурсами являются, пожалуй, строки (string
), цвета (color
) и графические рисунки (bitmap
). В приложении не рекомендуется применять жестко написанные строки кода - вместо них следует использовать соответствующие идентификаторы, что позволяет изменять текст строкового ресурса, не изменяя исходного кода.
Начинающие программисты не всегда до конца правильно понимают процесс создания ресурсов. В Android используются два подхода - первый подход заключается в том, что ресурсы задаются в файле, при этом имя файла значения не имеет. Второй подход - ресурс задается в виде самого файла, и тогда имя файла уже имеет значение (при этом нужно учитывать определенные нюансы).
Общая структура каталогов, содержащих ресурсы выглядит следующим образом:
/res/values/strings.xml
/colors.xml
/dimens.xml
/attrs.xml
/styles.xml
/drawable/*.png
/*.jpg
/*.gif
/*.9.png
/anim/*.xml
/layout/*.xml
/raw/*.*
/xml/*.xml
/assets/*.*/*.*
Только в assets
может располагаться любой набор подкаталогов разной вложенности. Файлы, находящиеся в любом другом каталоге, размещаются именно на уровне этого каталога и не глубже.
Тип ресурса | Размещение | Описание |
---|---|---|
Цвета | res/values/имя_файла | Идентификатор цвета, указывающий на цветовой код. ID таких ресурсов выражаются в R.java как R.color.* . XML-узел: /resources/color |
Строки | res/values/имя_файла | Строковые ресурсы. В их число также входят строки в формате java и html. ID таких ресурсов выражаются в R.java как R.string.* . XML-узел: resources/string . Можно использовать дополнительное форматирование при помощи стандартных html-тегов <b> , <i> и <u> . Методы, которые будут обрабатывать строковые ресурсы с HTML-форматированием, должны уметь обрабатывать эти теги. |
Меню | /res/menu/имя_файла | Меню в приложении можно задать как XML-ресурсы. |
Параметры | /res/values/имя_файла | Представляет собой параметры или размеры различных элементов. Поддерживает пикселы, дюймы, миллиметры, не зависящие от плотности экрана пикселы (dip) и пикселы, не зависящие от масштаба. ID таких ресурсов выражаются в R.java как R.dimen.* . XML-узел: resources/dimen |
Изображения | /res/drawable/ваши_файлы | Ресурсы-изображения. Поддерживает форматы JPG, GIF, PNG (самый предпочтительный) и др. Каждое изображение является отдельным файлом и получает собственный идентификатор, который формируется по имени файла без расширения. Такие ID ресурсов представлены в файле R.java как R.drawable.* . Система также поддерживает так называемые растягиваемые изображения (stretchable image), в которых можно менять масштаб отдельных элементов, а другие элементы оставлять без изменений. |
Отрисовываемые цвета | /res/values/ваш_файл или /res/drawable/ваши_файлы | Представляет цветные прямоугольники, которые используются в качетве фона основных отрисовываемых объектов, например точечных рисунков. Поддержка такой функции обеспечивается тегом значения drawable , находящимся в подкаталоге значений. Такие id ресурсов выражаются в файле R.java как R.drawable.* . ХМL-узел для такого файла: /resources/drawable . В Android при помощи специальных ХМL-файлов, расположенных в /res/drawable , также подерживаются скругленные и градиентные прямоугольники. Корневым ХМL-тегом для drawable является <shape> . Идентификаторы таких ресурсов выражаются в файле R.java как R.drawable.* . В таком случае, каждое имя файла преобразуется в уникальный id отрисовываемого объекта |
Анимация | /res/anim/ваш_файл | Android может выполнить простую анимацию на графике или на серии графических изображений. Анимация включает вращения, постепенное изменение, перемещение и протяжение. |
Произвольные XML-файлы | /res/xml/*.xml | В Android в качестве ресурсов могут использоваться произвольные XML-файлы. Они компилируются в aapt. Идентификаторы таких ресурсов также выражаются в файле R.java как R.xml. * |
Произвольные необработанные ресурсы | /res/raw/. | Любые нескомпилированные двоичные или текстовые файлы, например, видео. Каждый файл получает уникальный id ресурса. Идентификаторы таких ресурсов выражаются в файле R.java как R.raw.* |
Произвольные необработанные активы | /assets/*.*/*.* | Можно использовать произвольные файлы в произвольно названных каталогах, которые находятся в подкаталоге /assets . Это не ресурсы, а просто необработанные файлы. В этом каталоге, в отличие от /res, подкаталоги могут располагаться на любой глубине. Для таких файлов не создаются идентификаторы ресурсов. При работе с ними нужно использовать относительное имя пути, начиная с /assets , но не указываея этого каталгоа в имени пути |
Жизненный цикл приложения на Android | Assets |