R, особенно когда речь идет о доступе к ресурсам своего приложения и сторонних библиотек. Эта статья поможет разобраться в разнице между app.R и com.google.android.material.R, а также научит правильно обращаться к нужным ресурсам.Что такое классы R?
Класс R представляет собой специальную структуру, автоматически создаваемую Android Studio во время процесса сборки проекта. Он служит контейнером ссылок на ресурсы вашего приложения (изображения, цвета, стили, макеты и т.д.). Каждый ресурс автоматически получает уникальный числовой идентификатор, хранящийся в соответствующих полях класса
R.Классы R бывают двух типов:
- Ваш собственный класс
R, называемыйapp.R, соответствует ресурсам вашего проекта. - Класс R сторонней библиотеки, обозначаемый именем пакета библиотеки (например,
com.google.android.material.R), содержит ссылки на ресурсы конкретной внешней библиотеки.
app.R
Что это?Это главный класс ресурсов вашего собственного приложения. Здесь хранятся идентификаторы всех ресурсов, размещённых в директории
/res/ вашего проекта. Все строки, цвета, размеры, рисунки и прочее хранится именно тут.Как используется?
Используя класс
app.R, вы обращаетесь к собственным ресурсам приложения:
ВыделитьKotlin
setBackgroundColor(ContextCompat.getColor(context, R.color.my_color))
setImageResource(R.drawable.ic_launcher_background)com.google.android.material.R
Что это?Библиотека Material Components for Android (
com.google.android.material) предлагает набор готовых элементов дизайна и стилей, которые соответствуют руководствам Material Design. Каждое расширение предоставляет собственные ресурсы, которые упаковываются отдельно от ресурсов основного приложения.Как используется?
Класс
com.google.android.material.R даёт возможность обратиться к ресурсам, принадлежащим самой библиотеке Material Components. Например, к стилю кнопки, цвету акцента, форме полей ввода и другим элементам оформления:
ВыделитьKotlin
style="@style/Widget.MaterialComponents.Button.OutlinedButton.Icon"
colorPrimary="@color/material_on_primary_emphasis_high_type"Обратите внимание, что обращаться к этим ресурсам нужно именно через полный путь, так как они принадлежат отдельной библиотеке:
ВыделитьKotlin
setBackgroundColor(ContextCompat.getColor(context, com.google.android.material.R.color.design_default_color_secondary))Когда использовать каждый из них?
Используйте app.R, когда вам нужно обратиться к ресурсу вашего приложения:
- Цвета, определённые в "colors.xml".
- Строки, прописанные в "strings.xml".
- Макеты и образы из папки "drawable".
Используйте
com.google.android.material.R, когда используете ресурсы из библиотеки Material Components:
- Стили кнопок, чекбоксов и переключателей.
- Типографика и оформление экранов согласно гайдлайнам Material Design.
Подведём итоги
app.Rсодержит ресурсы вашего собственного приложения.com.google.android.material.Rвключает ресурсы библиотеки Material Components.- Обращаться к нужному классу ресурсов необходимо соответствующим образом, учитывая источник происхождения ресурса.
Умение верно обращаться к разным классам
R сделает ваш код аккуратным и безопасным, предотвратив потенциальные ошибки при сборке и развертывании приложения.