簡體   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