如何从Jetpack撰写修饰符引用xml样式?



如何从Compose小部件引用资源样式?

styles.xml

<style name="Style.Monet.TextView.HeaderSubtext" parent="Widget.AppCompat.TextView">
<item name="android:textColor">#737373</item>
<item name="android:textSize">12sp</item>
<item name="android:layout_marginStart">16dp</item>
<item name="android:layout_marginBottom">16dp</item>
<item name="android:layout_marginEnd">24dp</item>
</style>

MyComponent.kt

Text(text = "June 2021", style = TextStyle(R.style.Style_TextView_HeaderSubtext))

但这不起作用。有办法解决这个问题吗?

你不能这样做,因为ComposeText的样式不同,TextStyle它不负责,所以所有xml样式都负责。例如,您不能添加页边距。

可以创建composeTextStyle:

val textStyle = TextStyle(
color = Color(0xFF737373),
fontSize = 12.sp,
)

并在您的项目中全局使用或传递到您的主题。这是在撰写中使用样式的首选方式,请在主题文档中查看更多信息。自定义材料可用样式之一:

val typography = Typography(
body1 = TextStyle(
color = Color(0xFF737373),
fontSize = 12.sp,
)
)

传递给你的主题:

@Composable
fun ComposePlaygroundTheme(
darkTheme: Boolean = isSystemInDarkTheme(),
content: @Composable () -> Unit
) {
val colors = if (darkTheme) {
DarkThemeColors
} else {
LightThemeColors
}
MaterialTheme(
colors = colors,
typography = typography,
shapes = shapes,
content = content,
)
}

在可组合根上应用主题:

setContent {
ComposePlaygroundTheme {
// your composables
}
}

之后你可以这样使用:

Text("",
style = MaterialTheme.typography.body1,
)

要在组合中应用边距,您需要使用填充修饰符。在布局文档中查看有关compose布局的更多信息:

如果你想在compose中重用相同样式的文本,你可以用预定义的样式和填充创建自己的composable:

@Composable
fun ProjectText(text: String, modifier: Modifier) {
// without material theme you can just define text style here and pass to text
//    val textStyle = TextStyle(
//        color = Color(0xFF737373),
//        fontSize = 12.sp,
)
Text("",
style = MaterialTheme.typography.body1,
modifier = modifier
.padding(start = 16.dp, end = 24.dp, bottom = 16.dp)
)
}

用法:

ProjectText("June 2021")

相关内容

  • 没有找到相关文章

最新更新