Gui*_*lva 4 android android-jetpack-compose
我正在使用 Jetpack Compose 测试材质主题,但我不确定为什么无法使主题的onSurface颜色正常工作。
这是颜色Theme.kt设置onSurface为Color.Red:
private val DarkColorPalette = darkColors(
primary = Purple200,
primaryVariant = Purple700,
secondary = Teal200,
onSurface = Color.Red, // <------- HERE
onPrimary = Color.Blue, // <----- HERE
)
private val LightColorPalette = lightColors(
primary = Purple500,
primaryVariant = Purple700,
secondary = Teal200,
onSurface = Color.Red, // <------- AND HERE
onPrimary = Color.Blue, // <----- HERE
)
@Composable
fun ExploringMaterialTheme(
darkTheme: Boolean = isSystemInDarkTheme(),
content: @Composable() () -> Unit
) {
val colors = if (darkTheme) {
DarkColorPalette
} else {
LightColorPalette
}
MaterialTheme(
colors = colors,
typography = Typography,
shapes = Shapes,
content = content
)
}
Run Code Online (Sandbox Code Playgroud)
这是活动:
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
MyApp()
}
}
}
@Preview
@Composable
fun MyApp() {
ExploringMaterialTheme {
// I also tried
// Surface(color = MaterialTheme.colors.surface) {
Surface {
Text(text = "Hello!!", modifier = Modifier.padding(16.dp))
}
}
}
Run Code Online (Sandbox Code Playgroud)
我期待着“你好!!” 以红色显示,但相反,它以普通黑色显示。我有什么想法吗?
当我在组件中设置颜色时,它的工作效果符合预期Surface。Surface获得正确的on颜色(onPrimary在本例中):
Surface(color = MaterialTheme.colors.primary) {
Text(text = "Hello!!", modifier = Modifier.padding(16.dp))
}
Run Code Online (Sandbox Code Playgroud)
可Surface组合使用:
CompositionLocalProvider(
LocalContentColor provides contentColor){
//
content()
}
Run Code Online (Sandbox Code Playgroud)
其中 的contentColor定义为:
fun Colors.contentColorFor(backgroundColor: Color): Color {
return when (backgroundColor) {
primary -> onPrimary
primaryVariant -> onPrimary
secondary -> onSecondary
secondaryVariant -> onSecondary
background -> onBackground
surface -> onSurface
error -> onError
else -> Color.Unspecified
}
}
Run Code Online (Sandbox Code Playgroud)
目前您必须surface在主题中指定颜色:
private val LightColorPalette = lightColors(
primary = Blue500,
surface = Color.Yellow)
Run Code Online (Sandbox Code Playgroud)
在这种情况下,Text使用onSurface颜色。
如果您不指定颜色,surface组件Surface将使用background用作 colorBackground 并onBackground使用 用作Text.
| 归档时间: |
|
| 查看次数: |
5429 次 |
| 最近记录: |