Урок 3. Ресурсы папки res/values. Локализация. AndroidManifest
В этом уроке мы с вами узнаем, зачем в Android системе используются ресурсы и какими они бывают.
Ресурсы из папки res/values
В данном уроке мы познакомимся только с ресурсами, которые находятся в папке res : строки, цвета, стили, размеры. Полную информацию о ресурсах мы будем проходить в следующем модуле, но если вы хотите ознакомиться сейчас, то вы можете посмотреть на сайте официальной документации.
Для начала откроем наш проект и в верхнем левом углу поменяем отображение проекта с Android на Project . Это позволит нам увидеть все папки, которые реально созданы в нашем проекте:
Вот как выглядит наш проект. Нажмём на папку values и посмотрим, что в ней находится:
Видим три файла:
- colors.xml – содержит в себе все цвета.
- strings.xml – хранит все строковые ресурсы.
- styles.xml – и все стили приложения.
Хранение таких данных в отдельных ресурсах дает нам гибкость и удобство при работе с проектом. Мы рассмотрим преимущества на примере локализации строковых ресурсов.
Локализация
Мы будем поддерживать два языка в нашем приложении: английский и русский. Для локализации приложения используют файл strings.xml . Туда помещается весь текст вашего приложения, который должен быть подвержен локализации. Чтобы добавить поддержку ещё одного языка, надо создать папку с именем values-language . Т.к. мы поддерживаем русский язык, то создадим папку values-ru .
Для этого нажмём правой кнопкой на папку res и выберем пункт New -> Android resource directory :
При создании директории у нас появится окно, в котором надо заполнить поля следующими значениями:
- Directory name – values-ru
- Resource type – values
- Source set – main
Вот как это должно выглядеть:
После этого видим, что у нас создалась папка values-ru . Отлично, создадим новый файл strings.xml . Для этого нажимаем правой кнопкой по папке values-ru , выбираем New -> Values resource file :
Затем появится окно, в котором необходимо ввести имя файла. Вводим strings . И у нас создался файл, иконка которого выглядит в виде флага России.
Отлично. Теперь всё, что нам надо сделать – это добавлять ресурсы в эту папку с таким же именем, но значения мы будем писать на русском языке. Система автоматически будет брать значения из этого файла, если у пользователя на устройстве установлен русский язык.
Для начала давайте посмотрим как выглядит обычный строковый ресурс:
У каждого строкового ресурса есть имя, по которому в дальнейшем будет идти обращение к нему, а также его значение. На самом деле так выглядят не только строковые ресурсы, а все ресурсы приложения:
Просто вместо типа ресурса string используются другие необходимые значения ( color , dimen и т.д.).
Теперь проверим, что это всё действительно работает. Добавим строку в файл values/strings.xml :
Теперь добавим строку в файл values-ru/strings.xml :
Видим, что название ресурсов followers_hint , following_hint совпадает в двух папках. А вот значения мы можем указывать для каждого языка свои.
Стоит отметить, что помимо ручного заполнения файлов с ресурсами, существует возможность делать это через специальный редактор. Чтобы в него попасть необходимо, открыв файл со строковыми ресурсами (любого языка), в правом верхнем углу нажать кнопку «Open editor» (рус. открыть редактор):
Теперь, когда мы научились добавлять ресурсы, давайте в файле activity_user_info.xml с нашей разметкой у элемента followers_text_view заменим напрямую написанный текст на только что созданный строковый ресурс android:text="@string/followers_hint" , а у элемента following_text_view укажем атрибут android:text="@string/following_hint" .
Так выглядит синтаксис при ссылке на файл ресурса. Необходимо вначале добавить @ , потом название файла, потом имя ресурса. Наши элементы followers_text_view , following_text_view теперь выглядят таким образом.
Запустим наше приложение и убедимся, что наша локализация действительно работает.
После запуска приложения на нашем эмуляторе Nexus 5X API 27 , видим, что вывелись строки Following , Followers , т.к. на эмуляторе стоит английский язык.
Давайте добавим русский язык и сделаем его основным.
Можем открыть наше приложение на эмуляторе или запустить его заново. Результат выглядит так:
Видим, что уже отображается надпись Читает , Читатели . Вот такое простое и элегантное решение предоставляет нам система для добавления поддержки новых языков.
В этом уроке мы добавим ресурсы, которые понадобятся нам в дальнейшем, чтобы потом не тратить на это время. В обычном проекте ресурсы добавляются динамически в процессе написания кода, но для учебной цели мы сейчас добавим большую часть ресурсов, которые нам понадобятся в дальнейших уроках.
Наш файл res/values/strings.xml должен выглядеть так:
Также добавим все цвета, которые нам понадобятся для нашего приложения. Наш файл res/values/colors.xml должен выглядеть так:
AndroidManifest
Сердцем любого Android приложения является файл AndroidManifest . Он находится в корневой папке каждого приложения и содержит важную информацию о приложении, которая требуется системе Android . Только получив эту информацию, система может выполнить какой-либо код приложения. Также манифест содержит:
- Описание компонентов приложения, из которых состоит приложение. Он содержит имена классов, которые реализуют каждый компонент, и публикует их возможности На основании этих деклараций система Android может определить, из каких компонентов состоит приложение и при каких условиях их можно запускать.
- Разрешения, которые должны быть выданы приложению, чтобы оно могло получить доступ к защищенным частям API-интерфейса и взаимодействовать с другими приложениями.
Подробнее ознакомиться с функциями манифеста можно в официальной документации или в данном видеоуроке.