Урок 3. Ресурсы папки res/values. Локализация. AndroidManifest

Код начала урока:

gitzip

Структура урока:

Видео версия урока

В этом уроке мы с вами узнаем, зачем в Android системе используются ресурсы и какими они бывают.

Ресурсы из папки res/values

В данном уроке мы познакомимся только с ресурсами, которые находятся в папке res: строки, цвета, стили, размеры. Полную информацию о ресурсах мы будем проходить в следующем модуле, но если вы хотите ознакомиться сейчас, то вы можете посмотреть на сайте официальной документации.

Для начала откроем наш проект и в верхнем левом углу поменяем отображение проекта с Android на Project. Это позволит нам увидеть все папки, которые реально созданы в нашем проекте:

ProjectMode.png

Вот как выглядит наш проект. Нажмём на папку values и посмотрим, что в ней находится:

ValuesFolder.png

Видим три файла:

  • colors.xml – содержит в себе все цвета.
  • strings.xml – хранит все строковые ресурсы.
  • styles.xml – и все стили приложения.

Хранение таких данных в отдельных ресурсах дает нам гибкость и удобство при работе с проектом. Мы рассмотрим преимущества на примере локализации строковых ресурсов.

Локализация

Мы будем поддерживать два языка в нашем приложении: английский и русский. Для локализации приложения используют файл strings.xml. Туда помещается весь текст вашего приложения, который должен быть подвержен локализации. Чтобы добавить поддержку ещё одного языка, надо создать папку с именем values-language. Т.к. мы поддерживаем русский язык, то создадим папку values-ru.

Для этого нажмём правой кнопкой на папку res и выберем пункт New -> Android resource directory:

ResDirectory.png

При создании директории у нас появится окно, в котором надо заполнить поля следующими значениями:

  • Directory namevalues-ru
  • Resource typevalues
  • Source setmain

Вот как это должно выглядеть:

Values-ru.png

После этого видим, что у нас создалась папка values-ru. Отлично, создадим новый файл strings.xml. Для этого нажимаем правой кнопкой по папке values-ru, выбираем New -> Values resource file:

StringsRu.png

Затем появится окно, в котором необходимо ввести имя файла. Вводим strings. И у нас создался файл, иконка которого выглядит в виде флага России.

StringsRuCompleted.png

Отлично. Теперь всё, что нам надо сделать – это добавлять ресурсы в эту папку с таким же именем, но значения мы будем писать на русском языке. Система автоматически будет брать значения из этого файла, если у пользователя на устройстве установлен русский язык.

Для начала давайте посмотрим как выглядит обычный строковый ресурс:

sample_resource.xml

<string name="имя_нашего_ресурса">В качестве значения идет любой текст</string>

У каждого строкового ресурса есть имя, по которому в дальнейшем будет идти обращение к нему, а также его значение. На самом деле так выглядят не только строковые ресурсы, а все ресурсы приложения:

reource_format.xml

<тип_ресурса name="имя_ресурса">Значение ресурса</тип_ресурса>

Просто вместо типа ресурса string используются другие необходимые значения (color, dimen и т.д.).

Теперь проверим, что это всё действительно работает. Добавим строку в файл values/strings.xml:

values/strings.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <!--Остальные элементы сверху не изменились -->

    <string name="following_hint">Following</string>
    <string name="followers_hint">Followers</string>
</resources>

Теперь добавим строку в файл values-ru/strings.xml:

values-ru/strings.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <!--Остальные элементы сверху не изменились -->

    <string name="following_hint">Читает</string>
    <string name="followers_hint">Читатели</string>
</resources>

Видим, что название ресурсов followers_hint, following_hint совпадает в двух папках. А вот значения мы можем указывать для каждого языка свои.

Стоит отметить, что помимо ручного заполнения файлов с ресурсами, существует возможность делать это через специальный редактор. Чтобы в него попасть необходимо, открыв файл со строковыми ресурсами (любого языка), в правом верхнем углу нажать кнопку «Open editor» (рус. открыть редактор):

TranslationsEditor.png

Теперь, когда мы научились добавлять ресурсы, давайте в файле 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>

    <!--Остальные элементы сверху не изменились -->

    <TextView
        android: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"/>

    <TextView
        android: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, т.к. на эмуляторе стоит английский язык.

AppEn.png

Давайте добавим русский язык и сделаем его основным.

RuLang.png

Можем открыть наше приложение на эмуляторе или запустить его заново. Результат выглядит так:

AppRu.png

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

В этом уроке мы добавим ресурсы, которые понадобятся нам в дальнейшем, чтобы потом не тратить на это время. В обычном проекте ресурсы добавляются динамически в процессе написания кода, но для учебной цели мы сейчас добавим большую часть ресурсов, которые нам понадобятся в дальнейших уроках.

Наш файл res/values/strings.xml должен выглядеть так:

values/strings.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="app_name">Colibri Tweet</string>

    <string name="followers_hint">Followers</string>
    <string name="following_hint">Following</string>

    <string name="search_query_hint">Enter user name</string>
    <string name="search_hint">search</string>
    <string name="not_enough_symbols_msg">Please enter at least one symbol</string>
    <string name="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>
    <string name="following_hint">Читает</string>
    <string name="followers_hint">Читатели</string>

    <string name="search_query_hint">Введите имя</string>
    <string name="search">Поиск</string>

    <string name="not_enough_symbols_msg">Введите хотя бы один символ</string>
    <string name="loading_error_msg">Ошибка при загрузке данных</string>
</resources>

Также добавим все цвета, которые нам понадобятся для нашего приложения. Наш файл res/values/colors.xml должен выглядеть так:

colors.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="colorPrimary">#3F51B5</color>
    <color name="colorPrimaryDark">#303F9F</color>
    <color name="colorAccent">#FF4081</color>

    <color name="white_alpha">#66ffffff</color>

    <color name="black">#000000</color>
    <color name="white">#ffffff</color>
    <color name="gray_dove_light">#666666</color>
    <color name="gray_mercury">#E1E1E1</color>
</resources>

AndroidManifest

Сердцем любого Android приложения является файл AndroidManifest. Он находится в корневой папке каждого приложения и содержит важную информацию о приложении, которая требуется системе Android. Только получив эту информацию, система может выполнить какой-либо код приложения. Также манифест содержит:

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

Подробнее ознакомиться с функциями манифеста можно в официальной документации или в данном видеоуроке.

Подведём итоги:

  • Мы познакомились с базовыми ресурсами rev/values в Android.
  • Научились делать локализацию в приложении, добавлять ресурсы для новых языков.
  • Познакомились с главным файлом любого Android приложения – AndroidManifest.

Полезные материалы:

Полный листинг изменений кода:

Code diff

УВИДЕТЬ ВСЕ Добавить заметку
ВЫ
Добавить ваш комментарий