Kotlin: Разница между app.R и com.google.android.material.R

Разработчики Android нередко сталкиваются с путаницей относительно использования различных версий класса 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


Что это?Это...

Kotlin: Класс Toast(): Кратковременное сообщение

В Kotlin для вывода кратковременных уведомлений (на 2–5 секунд) используется класс Toast из Android SDK.

Основная функция‑конструктор


Toast.makeText(context, text, duration).show()

Параметры:
  • context — контекст приложения (например, this в Activity, requireContext() во фрагменте).
  • text — текст сообщения (строка или ресурс R.string.xxx).
  • duration — длительность показа:
    • Toast.LENGTH_SHORT — ~2 секунды;
    • Toast.LENGTH_LONG — ~3,5 секунды.


Простой пример:
Toast.makeText(this, "Операция выполнена!", Toast.LENGTH_SHORT).show()

Расширенный пример (С настройкой позиции):
val toast = Toast.makeText(this, "Сообщение с настройкой", Toast.LENGTH_LONG)
toast.setGravity(Gravity.TOP or Gravity.CENTER_HORIZONTAL, 0, 50)
toast.show()

setGravity(gravity, xOffset, yOffset) задаёт:
  • позицию на экране (Gravity.TOP, Gravity.CENTER, Gravity.BOTTOM и т. п.);
  • смещение по осям X и Y (в пикселях).

Важные нюансы


  1. Вызов .show() обязателен — без него Toast не отобразится.
  2. Контекст
...