Aji*_*ana 6 android kotlin android-jetpack android-jetpack-compose
我需要对整个应用程序中使用的所有 Text() 应用通用字体。目前,我正在使用如下样式或字体将其手动应用到每个文本。我如何将其指定为应用程序的全局主题?在正常的 xml 布局中,我使用自定义 TextView 小部件来实现此目的。
Text(
text = stringResource(id = R.string.userName),
style = typography.h2,
fontSize = 20.sp,
)
Run Code Online (Sandbox Code Playgroud)
Mah*_*hag 10
您可以使用typography
参数 inMaterialTheme
来指定默认字体。
在 Material2 中,您可以使用defaultFontFamily
参数来指定默认字体,如 @Ajith 所示。但该参数在Material3(Material Design 3)中被删除。
\n\n注意:与 M2 Typography 类不同,M3 Typography 类当前不包含参数
\ndefaultFontFamily
。您\xe2\x80\x99 将需要使用\nfontFamily
每个单独 TextStyle 中的参数。\n(源)
但您可以对 Material3 执行以下操作。以下是在 M3 中设置默认字体系列的示例:
\n// Type.kt\n\nimport androidx.compose.material3.Typography\nimport androidx.compose.ui.text.font.Font\nimport androidx.compose.ui.text.font.FontFamily\nimport androidx.compose.ui.text.font.FontStyle\nimport androidx.compose.ui.text.font.FontWeight\nimport com.example.exampleapp.R\n\n// Declare the font families\nobject AppFont {\n val TitilliumWeb = FontFamily(\n Font(R.font.titillium_web_regular),\n Font(R.font.titillium_web_italic, style = FontStyle.Italic),\n Font(R.font.titillium_web_medium, FontWeight.Medium),\n Font(R.font.titillium_web_medium_italic, FontWeight.Medium, style = FontStyle.Italic),\n Font(R.font.titillium_web_bold, FontWeight.Bold),\n Font(R.font.titillium_web_bold_italic, FontWeight.Bold, style = FontStyle.Italic)\n )\n}\n\nprivate val defaultTypography = Typography()\nval Typography = Typography(\n displayLarge = defaultTypography.displayLarge.copy(fontFamily = AppFont.TitilliumWeb),\n displayMedium = defaultTypography.displayMedium.copy(fontFamily = AppFont.TitilliumWeb),\n displaySmall = defaultTypography.displaySmall.copy(fontFamily = AppFont.TitilliumWeb),\n\n headlineLarge = defaultTypography.headlineLarge.copy(fontFamily = AppFont.TitilliumWeb),\n headlineMedium = defaultTypography.headlineMedium.copy(fontFamily = AppFont.TitilliumWeb),\n headlineSmall = defaultTypography.headlineSmall.copy(fontFamily = AppFont.TitilliumWeb),\n\n titleLarge = defaultTypography.titleLarge.copy(fontFamily = AppFont.TitilliumWeb),\n titleMedium = defaultTypography.titleMedium.copy(fontFamily = AppFont.TitilliumWeb),\n titleSmall = defaultTypography.titleSmall.copy(fontFamily = AppFont.TitilliumWeb),\n\n bodyLarge = defaultTypography.bodyLarge.copy(fontFamily = AppFont.TitilliumWeb),\n bodyMedium = defaultTypography.bodyMedium.copy(fontFamily = AppFont.TitilliumWeb),\n bodySmall = defaultTypography.bodySmall.copy(fontFamily = AppFont.TitilliumWeb),\n\n labelLarge = defaultTypography.labelLarge.copy(fontFamily = AppFont.TitilliumWeb),\n labelMedium = defaultTypography.labelMedium.copy(fontFamily = AppFont.TitilliumWeb),\n labelSmall = defaultTypography.labelSmall.copy(fontFamily = AppFont.TitilliumWeb)\n)\n
Run Code Online (Sandbox Code Playgroud)\n// Theme.kt\n\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.runtime.Composable\n\n@Composable\nfun AppTheme(\n content: @Composable () -> Unit\n) {\n MaterialTheme(\n typography = Typography,\n content = content\n )\n}\n
Run Code Online (Sandbox Code Playgroud)\n单个组件的示例:
\nimport androidx.compose.material3.Text\nimport androidx.compose.runtime.Composable\nimport com.example.exampleapp.theme.AppFont\n\n@Composable\nfun ExampleScreen() {\n Text(\n text = "Hello World!", \n fontFamily = AppFont.TitilliumWeb\n )\n}\n
Run Code Online (Sandbox Code Playgroud)\n
Jetpack Compose 支持主题化,并且可以通过在应用程序主题中指定自定义字体来应用统一字体。执行此操作的步骤如下。
private val myCustomFont = FontFamily(
Font(R.font.helvetica_nue),
)
val Typography = Typography(
defaultFontFamily = myCustomFont,
)
Run Code Online (Sandbox Code Playgroud)
@Composable
fun MyApplicationTheme(content: @Composable () -> Unit) {
MaterialTheme(
typography = Typography,
)
}
Run Code Online (Sandbox Code Playgroud)
MyApplicationTheme {
NewsDetailScreen()
}
Run Code Online (Sandbox Code Playgroud)
现在,无论应用主题,您的应用程序都会以指定字体显示文本。
参考: https: //developer.android.com/jetpack/compose/themes/material#typography
如果要始终使用相同的字体,请指定 defaultFontFamily 参数并省略任何 TextStyle 元素的 fontFamily:
归档时间: |
|
查看次数: |
7849 次 |
最近记录: |