![](/img/trans.png)
[英]In Jetpack Compose, how do i apply a font/typeface stored in Assets?
[英]How do i apply a default font to all Text() elements in the app using Jetpack Compose?
我需要对整个应用程序中使用的所有 Text() 应用通用字体。 目前我正在使用如下样式或字体手动将其应用于每个文本。 如何将其指定为应用程序的全局主题? 在普通的 xml 布局中,我使用自定义 TextView 小部件来实现这一点。
Text(
text = stringResource(id = R.string.userName),
style = typography.h2,
fontSize = 20.sp,
)
Jetpack Compose 支持主题化,并且可以通过在应用程序主题中指定自定义字体来应用统一字体。 执行此操作的步骤如下。
private val myCustomFont = FontFamily(
Font(R.font.helvetica_nue),
)
val Typography = Typography(
defaultFontFamily = myCustomFont,
)
@Composable
fun MyApplicationTheme(content: @Composable () -> Unit) {
MaterialTheme(
typography = Typography,
)
}
MyApplicationTheme {
NewsDetailScreen()
}
现在,您的应用程序将在应用主题的任何地方以指定的字体显示文本。
参考: https ://developer.android.com/jetpack/compose/themes/material#typography
如果要始终使用相同的字体,请指定 defaultFontFamily 参数并省略任何 TextStyle 元素的 fontFamily:
一个选项是定义自定义可组合,例如:
@Composable
fun H2Text(
text: AnnotatedString,
modifier: Modifier = Modifier) {
Text(
text = text,
modifier = modifier,
style = typography.h2,
fontSize = 20.sp,
)
}
然后在应用程序中使用H2Text
而不是Text
一种类似的方法是首先在 Text composable 上创建自定义实现,我们称之为 CustomText。 然后对于您的用例,您可以在最常用的文本样式上编写包装器,例如
@Composable
TextH2(text : String) {
//call your own wrapper over framework Text composable
CustomText(text = text, typography = h2)
}
为了使事情更简单,您可以将字体资源、重量和大小包装在一起,然后创建此类的特定实现,例如
val h2 = CustomTypography(font = R.font.your-ttf-file, fontSize = 20.sp, fontWeight = Medium)
上面的样式数据在一个单独的可组合中处理,在我们的例子中是 CustomText。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.