Не могу использовать шрифт в 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"
)
...
}