无法在 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"
)
...
}
很简单;刚刚从向导创建了一个 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"
)
...
}