繁体   English   中英

如何使用 Jetpack Compose 将默认字体应用于应用程序中的所有 Text() 元素?

[英]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 支持主题化,并且可以通过在应用程序主题中指定自定义字体来应用统一字体。 执行此操作的步骤如下。

将您的自定义字体复制到 res/font 目录,例如:helvetica_nue.ttf

在此处输入图像描述

创建一个 Kotlin 文件 (Type.kt) 并在此处添加您的字体系列对象。 将 defaultFontFamily 指定为您的自定义字体。 如果您希望执行一些额外的自定义,您可以将您的样式添加到 body1 排版,因为这是用于所有 Text() 的默认排版,除非指定。
private val myCustomFont = FontFamily(
    Font(R.font.helvetica_nue),
)


val Typography = Typography(
    defaultFontFamily = myCustomFont,
)
创建一个 Kotiln 文件(Theme.kt 或任何名称)并声明您的应用程序主题
@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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM