在 Jetpack Compose 中,如何应用存储在 Assets 中的字体/字样?

时间:2021-06-26 16:48:32

标签: android android-jetpack-compose

在 Jetpack compose 中,文档建议使用 font-family 属性应用字体并参考存储在 res/fonts 文件夹中的字体文件。是否也可以使用存储在 assets/ 下的字体文件?

2 个答案:

答案 0 :(得分:1)

实际上在compose中,通常有一个名为Typography.kt的类,由MaterialTheme Composable使用。如 Theme Codelab 中所述,正确的方法是修改此类以将您的字体添加到其中。实际上,您可以创建自己的 mAppTheme 来覆盖 Material 的。

https://youtu.be/DDd6IOlH3io?t=6m27s

该视频展示了如何实现自定义调色板,但也可以采用类似的方法来实现自定义排版。

检查 JetSnack 示例应用 https://github.com/android/compose-samples

答案 1 :(得分:1)

是的!

/**
 * Create a Font declaration from a file in the assets directory. The content of the [File] is
 * read during construction.
 *
 * @param assetManager Android AssetManager
 * @param path full path starting from the assets directory (i.e. dir/myfont.ttf for
 * assets/dir/myfont.ttf).
 * @param weight The weight of the font. The system uses this to match a font to a font request
 * that is given in a [androidx.compose.ui.text.SpanStyle].
 * @param style The style of the font, normal or italic. The system uses this to match a font to a
 * font request that is given in a [androidx.compose.ui.text.SpanStyle].
 */
@ExperimentalTextApi
@OptIn(InternalPlatformTextApi::class, ExperimentalTextApi::class)
@Stable
fun Font(
    assetManager: AssetManager,
    path: String,
    weight: FontWeight = FontWeight.Normal,
    style: FontStyle = FontStyle.Normal
): Font = AndroidAssetFont(assetManager, path, weight, style)