В этом уроке мы с вами узнаем, зачем в 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. И у нас создался файл, иконка которого выглядит в виде флага России.
Отлично. Теперь всё, что нам надо сделать – это добавлять ресурсы в эту папку с таким же именем, но значения мы будем писать на русском языке. Система автоматически будет брать значения из этого файла, если у пользователя на устройстве установлен русский язык.
Для начала давайте посмотрим как выглядит обычный строковый ресурс:
sample_resource.xml
<stringname="имя_нашего_ресурса">В качестве значения идет любой текст</string>
У каждого строкового ресурса есть имя, по которому в дальнейшем будет идти обращение к нему, а также его значение. На самом деле так выглядят не только строковые ресурсы, а все ресурсы приложения:
Просто вместо типа ресурса string используются другие необходимые значения (color, dimen и т.д.).
Теперь проверим, что это всё действительно работает. Добавим строку в файл values/strings.xml:
values/strings.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!--Остальные элементы сверху не изменились -->
<stringname="following_hint">Following</string>
<stringname="followers_hint">Followers</string>
</resources>
Теперь добавим строку в файл values-ru/strings.xml:
values-ru/strings.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!--Остальные элементы сверху не изменились -->
<stringname="following_hint">Читает</string>
<stringname="followers_hint">Читатели</string>
</resources>
Видим, что название ресурсов 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 теперь выглядят таким образом.
activity_user_info.xml
<RelativeLayout>
<!--Остальные элементы сверху не изменились -->
<TextViewandroid:id="@+id/following_text_view"android:layout_below="@id/user_location_text_view"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginTop="5dp"android:text="@string/following_hint"android:textSize="16sp"/>
<TextViewandroid:id="@+id/followers_text_view"android:layout_below="@id/user_location_text_view"android:layout_toEndOf="@+id/following_text_view"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginStart="10dp"android:layout_marginTop="5dp"android:text="@string/followers_hint"android:textSize="16sp"/>
</RelativeLayout>
Запустим наше приложение и убедимся, что наша локализация действительно работает.
После запуска приложения на нашем эмуляторе Nexus 5X API 27, видим, что вывелись строки Following, Followers, т.к. на эмуляторе стоит английский язык.
Давайте добавим русский язык и сделаем его основным.
Можем открыть наше приложение на эмуляторе или запустить его заново. Результат выглядит так:
Видим, что уже отображается надпись Читает, Читатели. Вот такое простое и элегантное решение предоставляет нам система для добавления поддержки новых языков.
В этом уроке мы добавим ресурсы, которые понадобятся нам в дальнейшем, чтобы потом не тратить на это время. В обычном проекте ресурсы добавляются динамически в процессе написания кода, но для учебной цели мы сейчас добавим большую часть ресурсов, которые нам понадобятся в дальнейших уроках.
Наш файл res/values/strings.xml должен выглядеть так:
values/strings.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<stringname="app_name">Colibri Tweet</string>
<stringname="followers_hint">Followers</string>
<stringname="following_hint">Following</string>
<stringname="search_query_hint">Enter user name</string>
<stringname="search_hint">search</string>
<stringname="not_enough_symbols_msg">Please enter at least one symbol</string>
<stringname="loading_error_msg">Error during loading info</string>
</resources>
Файл res/values-ru/strings.xml:
values-ru/strings.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<stringname="following_hint">Читает</string>
<stringname="followers_hint">Читатели</string>
<stringname="search_query_hint">Введите имя</string>
<stringname="search">Поиск</string>
<stringname="not_enough_symbols_msg">Введите хотя бы один символ</string>
<stringname="loading_error_msg">Ошибка при загрузке данных</string>
</resources>
Также добавим все цвета, которые нам понадобятся для нашего приложения. Наш файл res/values/colors.xml должен выглядеть так:
Сердцем любого Android приложения является файл AndroidManifest. Он находится в корневой папке каждого приложения и содержит важную информацию о приложении, которая требуется системе Android. Только получив эту информацию, система может выполнить какой-либо код приложения. Также манифест содержит:
Описание компонентов приложения, из которых состоит приложение. Он содержит имена классов, которые реализуют каждый компонент, и публикует их возможности На основании этих деклараций система Android может определить, из каких компонентов состоит приложение и при каких условиях их можно запускать.
Разрешения, которые должны быть выданы приложению, чтобы оно могло получить доступ к защищенным частям API-интерфейса и взаимодействовать с другими приложениями.
Сайт использует cookie-файлы для того, чтобы вам было удобнее им пользоваться. Для
продолжения работы с сайтом, вам необходимо принять использование cookie-файлов.
Код начала урока:
gitzip
Структура урока:
Видео версия урока
В этом уроке мы с вами узнаем, зачем в
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
. И у нас создался файл, иконка которого выглядит в виде флага России.Отлично. Теперь всё, что нам надо сделать – это добавлять ресурсы в эту папку с таким же именем, но значения мы будем писать на русском языке. Система автоматически будет брать значения из этого файла, если у пользователя на устройстве установлен русский язык.
Для начала давайте посмотрим как выглядит обычный строковый ресурс:
sample_resource.xml
У каждого строкового ресурса есть имя, по которому в дальнейшем будет идти обращение к нему, а также его значение. На самом деле так выглядят не только строковые ресурсы, а все ресурсы приложения:
reource_format.xml
Просто вместо типа ресурса
string
используются другие необходимые значения (color
,dimen
и т.д.).Теперь проверим, что это всё действительно работает. Добавим строку в файл
values/strings.xml
:values/strings.xml
Теперь добавим строку в файл
values-ru/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
теперь выглядят таким образом.activity_user_info.xml
Запустим наше приложение и убедимся, что наша локализация действительно работает.
После запуска приложения на нашем эмуляторе
Nexus 5X API 27
, видим, что вывелись строкиFollowing
,Followers
, т.к. на эмуляторе стоит английский язык.Давайте добавим русский язык и сделаем его основным.
Можем открыть наше приложение на эмуляторе или запустить его заново. Результат выглядит так:
Видим, что уже отображается надпись
Читает
,Читатели
. Вот такое простое и элегантное решение предоставляет нам система для добавления поддержки новых языков.В этом уроке мы добавим ресурсы, которые понадобятся нам в дальнейшем, чтобы потом не тратить на это время. В обычном проекте ресурсы добавляются динамически в процессе написания кода, но для учебной цели мы сейчас добавим большую часть ресурсов, которые нам понадобятся в дальнейших уроках.
Наш файл
res/values/strings.xml
должен выглядеть так:values/strings.xml
Файл
res/values-ru/strings.xml
:values-ru/strings.xml
Также добавим все цвета, которые нам понадобятся для нашего приложения. Наш файл
res/values/colors.xml
должен выглядеть так:colors.xml
AndroidManifest
Сердцем любого
Android
приложения является файлAndroidManifest
. Он находится в корневой папке каждого приложения и содержит важную информацию о приложении, которая требуется системеAndroid
. Только получив эту информацию, система может выполнить какой-либо код приложения. Также манифест содержит:Android
может определить, из каких компонентов состоит приложение и при каких условиях их можно запускать.Подробнее ознакомиться с функциями манифеста можно в официальной документации или в данном видеоуроке.
Подведём итоги:
rev/values
вAndroid
.Android
приложения –AndroidManifest
.Полезные материалы:
Полный листинг изменений кода:
Code diff