gpt4 book ai didi

android - 撰写中的主题相关资源

转载 作者:行者123 更新时间:2023-12-05 00:13:06 26 4
gpt4 key购买 nike

有什么方法可以在 Jetpack Compose 中使用依赖于主题的字符串和可绘制对象吗?在基于 xml 的布局中,可以使用属性和主题来完成。

最佳答案

您可以创建自己的局部变量,如下所示:

data class AppResources(
@DrawableRes val someDrawable: Int,
@StringRes val someString: Int,
)

val LocalAppResources = staticCompositionLocalOf<AppResources> {
error("CompositionLocal LocalAppResources not present")
}

在您的主题中提供所需的值:

val LightAppResources = AppResources(
someDrawable = R.drawable.drawable_light,
someString = R.string.text_light
)

val DarkAppResources = AppResources(
someDrawable = R.drawable.drawable_dark,
someString = R.string.text_dark
)

@Composable
fun AppTheme(
darkTheme: Boolean = isSystemInDarkTheme(),
content: @Composable () -> Unit
) {
val colors = if (darkTheme) {
DarkThemeColors
} else {
LightThemeColors
}
val appResources = if (darkTheme) {
DarkAppResources
} else {
LightAppResources
}
MaterialTheme(
colors = colors,
typography = typography,
shapes = shapes,
) {
CompositionLocalProvider(
LocalAppResources provides appResources,
content = content
)
}
}

然后您可以像这样在您的应用中使用它:

Image(
painterResource(id = LocalAppResources.current.someDrawable),
"..."
)
Text(
stringResource(id = LocalAppResources.current.someString)
)

关于android - 撰写中的主题相关资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69256686/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com