![](/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.