1

很简单;刚刚从向导创建了一个 Compose Multiplatform 项目。

继续创建主题;但我想使用相同的字体,所以我poppins.ttfcommonMain/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.

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

我该如何解决这个问题?

4

1 回答 1

1

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

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

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

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

resources将文件夹更改为res并相应修改 gradle在 Android 项目中指示资源文件夹不是resbut resources

我们最终在我们的项目中做了后者

// build.gradle.kts
android {
  ...
  sourceSets["main"].res.srcDirs(
    "src/commonMain/resources",
    "src/androidMain/resources"
  )
  ...
}
于 2022-02-15T09:12:39.273 回答