Прямые ссылки на публичные уроки для быстрого старта и стабильной индексации lesson-страниц.
В этом уроке углубимся в понимание различных типов ресурсов в каталоге res. При разработке приложений мы постоянно используем ресурсы. В качестве практики импортируем новые шрифты из макета Figma, разберём квалификаторы, вынесем захардкоженный текст в строковые ресурсы и настроим локализацию.
Ресурсы — статические объекты, хранящиеся в приложении: строки, цвета, макеты, стили, шрифты, изображения. Проще говоря, ресурсы — это всё, что не является кодом.
Основные каталоги:
.png, .jpg, .gif;background;drawable, хранятся в оригинальном качестве без масштабирования, расфасованы по папкам согласно плотности пикселей и выбираются автоматически. Хранятся в формате webp. Папки с пометкой v26 используются на устройствах с API 26+ (Android 8).@ в разметке или через класс R в коде. Здесь же хранится strings.xml с названием приложения. Все строки из разметки и кода следует выносить в этот файл — это необходимо для локализации.
Все ресурсы доступны через класс R, который хранит идентификаторы всех создаваемых ресурсов. Это позволяет переиспользовать значения в разных местах приложения и массово их редактировать.
В макете используются два семейства шрифтов: Rubik (для вариантов слов) и Nunito (для всего остального). Искать исходники следует на Google Fonts. Rubik нужен в начертании Regular, Nunito — в Regular, SemiBold и Bold. Скачиваем все нужные варианты.
После разархивации удаляем лишнее и переименовываем шрифты в стиле snake_case. Затем создаём каталог font в ресурсах и копируем шрифты туда.
Для создания каталога: правая кнопка мыши на папке res → New → Android Resource Directory. Задаём название font и выбираем тип font в выпадающем списке. Нажимаем OK.
Пересобираем проект, чтобы подтянулись новые ресурсы. Шрифты расставляются по элементам TextView согласно макету через атрибут fontFamily:
android:fontFamily="@font/rubik_regular"
Строки следует выносить в строковые ресурсы по трём причинам:
Перед выносом строк обратите внимание на предупреждение Missing contentDescription attribute on image у элементов ImageView. Content description — текстовое описание изображения для скринридеров (программ синтеза речи для людей с нарушением зрения). Задаётся атрибутом contentDescription.
После заполнения contentDescription среда разработки подсветит захардкоженные строки варнингом — это сигнал для их выноса в ресурсы.
Строки для вопроса и вариантов ответа будут задаваться программно, поэтому их следует перенести в атрибут tools и убрать text. Для остальных захардкоженных строк воспользуемся предложением добавить тег игнорирования.
Безусловно выносятся: строки об успешности или неверности ответа, а также тексты кнопок «Пропустить» и «Продолжить».
Способы создания строкового ресурса:
strings.xml.В окне создания ресурса:
snake_case. Рекомендуется начинать с типа строки, затем конкретизировать контекст: например, button_skip.После создания в атрибуте записывается ссылка на ресурс: @string/button_skip. Переход к ресурсу — Ctrl/Cmd + клик по ссылке.
Квалификаторы позволяют использовать разные значения ресурсов в зависимости от конфигурации устройства. Для локализации создаются папки для каждого языка, в каждой из которых лежит файл со строками нужной локали: папка values-en — английский, values-ru — русский. При обращении к строкам через класс R система сама выбирает нужный вариант по языку устройства.
Квалификаторы применяются не только для языков:
mipmap);res → New → Android Resource Directory. Тип оставить values, в названии добавить -ru.strings.xml в новую папку.При смене языка операционной системы будут подтягиваться строки с соответствующим квалификатором. Если нужный язык в приложении отсутствует, используется каталог по умолчанию. Хорошая практика — заполнять его на английском языке.