无法在 Kotlin Multiplatform 中使用字体

Can't use a font in 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 class 没有正确生成,我无法使用 R.font.poppins

如果我将“resources”重命名为“res”并将字体推入 res/font/ 那么它就可以工作了。 (但我只是复制了字体文件)。

我该如何解决这个问题?

事实证明这是一个 gradle 问题和对 KMM 缺乏经验。

默认情况下,Kotlin 多平台项目(无论平台如何)在每个模块内名为 resources 的文件夹中提供资源。

问题是 Android 的默认文件夹需要调用 res

因此您可以通过任一方式应用修复:

resources文件夹更改为res并相应修改gradle 在Android项目中指出资源文件夹不是 res 而是 resources.

我们最终在 our project

中完成了后者
// build.gradle.kts
android {
  ...
  sourceSets["main"].res.srcDirs(
    "src/commonMain/resources",
    "src/androidMain/resources"
  )
  ...
}