Не могу использовать шрифт в Kotlin Multiplatform

Довольно просто; только что создал проект Compose Multiplatform с помощью мастера.

Пошел вперед и создал тему; но я хотел использовать тот же шрифт, поэтому я поставил poppins.ttfвнутри commonMain/resources/font/.

Затем я объявил следующее в commonMainмодуль:

      expect val projectFontFamily: FontFamily

На commonDesktopмодуль, который я использовал:

      actual val projectFontFamily: FontFamily = FontFamily(
  Font("font/poppins.ttf")
)

Отлично, это сработало. Сейчас на commonAndroid:

      actual val projectFontFamily: FontFamily = FontFamily(
  Font(R.font.poppins)
)

По какой-то причине Rкласс не создается должным образом, и я не могу использовать R.font.poppins.

Если я переименую "resources" в "res" и засуну шрифт в res/font/тогда это работает. (Но я просто продублировал файл шрифта).

Как мне это сделать?

1 ответ

Оказывается, это скорее проблема градиента и некоторая неопытность в KMM.

Многоплатформенные проекты Kotlin по умолчанию (независимо от платформы) предоставляют свои ресурсы в папке, называемой внутри каждого модуля.

Проблема в том, что папку по умолчанию для Android нужно назвать

Таким образом, вы можете применить исправление в любом случае:

Измените папки и соответственно измените gradle или укажите в проекте Android, что папка ресурсов не resно resources.

Мы закончили тем, что сделали последнее в нашем проекте

      // build.gradle.kts
android {
  ...
  sourceSets["main"].res.srcDirs(
    "src/commonMain/resources",
    "src/androidMain/resources"
  )
  ...
}