Jetpack Compose:即使主题为深色,文本仍保持黑色

mar*_*ark 18 android kotlin android-jetpack-compose

即使主题设置为深色且背景为深色,应用程序中的文本仍保持黑色。只需看一下下面的代码和屏幕截图即可。

\n

Theme.kt(在这里,在 中DarkColorPalette,我设置了onSurfaceonBackgroundtoColor.White但它没有帮助)

\n
private val DarkColorPalette = darkColors(\n    primary = PastelGreen,\n    secondary = PastelGreenTransparent,\n    onPrimary = Color.White,\n    onSecondary = PastelGreen,\n    onBackground = Color.White,\n    onSurface = Color.White\n)\n\nprivate val LightColorPalette = lightColors(\n    primary = PastelGreen,\n    secondary = PastelGreenTransparent,\n    onPrimary = Color.White,\n    onSecondary = PastelGreen,\n)\n\n@Composable\nfun EschoolTheme(darkTheme: Boolean = isSystemInDarkTheme(), content: @Composable() () -> Unit) {\n\n    MaterialTheme(\n        colors = if (darkTheme) DarkColorPalette else LightColorPalette,\n        typography = typography,\n        shapes = Shapes,\n        content = content\n    )\n}\n
Run Code Online (Sandbox Code Playgroud)\n

kt型

\n
val manropeFamily = FontFamily(\n    Font(R.font.light, FontWeight.Light),\n    Font(R.font.regular, FontWeight.Normal),\n    Font(R.font.medium, FontWeight.Medium),\n    Font(R.font.bold, FontWeight.Bold),\n    Font(R.font.extra_bold, FontWeight.ExtraBold),\n    Font(R.font.extra_light, FontWeight.ExtraLight),\n    Font(R.font.semi_bold, FontWeight.SemiBold),\n)\n\nval typography =\n    Typography(\n        defaultFontFamily = manropeFamily,\n        h5 = TextStyle(fontWeight = FontWeight.Bold, fontSize = 23.sp,),\n        button = TextStyle(letterSpacing = 0.sp, fontWeight = FontWeight.Bold)\n    )\n
Run Code Online (Sandbox Code Playgroud)\n

屏幕代码(不关心俄语文本)

\n
@Composable\nfun Onboarding() {\n    EschoolTheme {\n        Column(\n            modifier = Modifier\n                .padding(20.dp)\n        ) {\n            Column(\n                Modifier\n                    .weight(1f)\n                    .fillMaxWidth()\n            ) {\n                Spacer(modifier = Modifier.weight(1f))\n                Image(\n                    painter = painterResource(id = R.drawable.icon),\n                    contentDescription = "\xd0\x98\xd0\xba\xd0\xbe\xd0\xbd\xd0\xba\xd0\xb0 \xd0\xbf\xd1\x80\xd0\xb8\xd0\xbb\xd0\xbe\xd0\xb6\xd0\xb5\xd0\xbd\xd0\xb8\xd1\x8f \xd1\x81\xd0\xbe \xd1\x81\xd0\xbc\xd0\xb0\xd0\xb9\xd0\xbb\xd0\xbe\xd0\xbc, \xd1\x81\xd0\xbc\xd0\xbe\xd1\x82\xd1\x80\xd1\x8f\xd1\x89\xd0\xb8\xd0\xbc \xd1\x87\xd0\xb5\xd1\x80\xd0\xb5\xd0\xb7 \xd0\xbc\xd0\xbe\xd0\xbd\xd0\xbe\xd0\xba\xd0\xbb\xd1\x8c",\n                    modifier = Modifier\n                        .align(Alignment.CenterHorizontally)\n                        .size(100.dp)\n                )\n                Spacer(modifier = Modifier.height(30.dp))\n                Text(\n                    "\xd0\x94\xd0\xbe\xd0\xb1\xd1\x80\xd0\xbe \xd0\xbf\xd0\xbe\xd0\xb6\xd0\xb0\xd0\xbb\xd0\xbe\xd0\xb2\xd0\xb0\xd1\x82\xd1\x8c \xd0\xb2 eschool!",\n                    textAlign = TextAlign.Center,\n                    style = MaterialTheme.typography.h5,\n                    modifier = Modifier.align(\n                        Alignment.CenterHorizontally\n                    )\n                )\n                Spacer(modifier = Modifier.weight(1f))\n            }\n            Text(\n                "\xd0\x97\xd0\xb4\xd0\xb5\xd1\x81\xd1\x8c \xd1\x82\xd1\x8b \xd0\xbc\xd0\xbe\xd0\xb6\xd0\xb5\xd1\x88\xd1\x8c \xd0\xb1\xd1\x8b\xd1\x81\xd1\x82\xd1\x80\xd0\xbe \xd0\xb4\xd0\xb5\xd0\xbb\xd0\xb8\xd1\x82\xd1\x8c\xd1\x81\xd1\x8f \xd0\xb4\xd0\xbe\xd0\xbc\xd0\xb0\xd1\x88\xd0\xba\xd0\xbe\xd0\xb9 \xd0\xb8 \xd1\x80\xd0\xb0\xd1\x81\xd0\xbf\xd0\xb8\xd1\x81\xd0\xb0\xd0\xbd\xd0\xb8\xd0\xb5\xd0\xbc \xd1\x81\xd0\xbe \xd1\x81\xd0\xb2\xd0\xbe\xd0\xb8\xd0\xbc\xd0\xb8 \xd0\xbe\xd0\xb4\xd0\xbd\xd0\xbe\xd0\xba\xd0\xbb\xd0\xb0\xd1\x81\xd1\x81\xd0\xbd\xd0\xb8\xd0\xba\xd0\xb0\xd0\xbc\xd0\xb8 \xd0\xb1\xd0\xb5\xd0\xb7 \xd0\xb2\xd1\x81\xd1\x8f\xd0\xba\xd0\xb8\xd1\x85 \xd0\xbc\xd0\xb5\xd1\x81\xd1\x81\xd0\xb5\xd0\xbd\xd0\xb6\xd0\xb4\xd0\xb6\xd0\xb5\xd1\x80\xd0\xbe\xd0\xb2. \xd0\x98\xd1\x81\xd0\xbf\xd0\xbe\xd0\xbb\xd1\x8c\xd0\xb7\xd1\x83\xd0\xb9 \xd1\x8d\xd1\x82\xd0\xbe \xd0\xbf\xd1\x80\xd0\xb8\xd0\xbb\xd0\xbe\xd0\xb6\xd0\xb5\xd0\xbd\xd0\xb8\xd0\xb5 \xd0\xba\xd0\xb0\xd0\xba \xd1\x88\xd0\xba\xd0\xbe\xd0\xbb\xd1\x8c\xd0\xbd\xd1\x8b\xd0\xb9 \xd0\xb4\xd0\xbd\xd0\xb5\xd0\xb2\xd0\xbd\xd0\xb8\xd0\xba, \xd0\xb2 \xd0\xba\xd0\xbe\xd1\x82\xd0\xbe\xd1\x80\xd1\x8b\xd0\xb9 \xd1\x82\xd1\x8b \xd0\xbe\xd0\xb1\xd1\x8b\xd1\x87\xd0\xbd\xd0\xbe \xd0\xb7\xd0\xb0\xd0\xbf\xd0\xb8\xd1\x81\xd1\x8b\xd0\xb2\xd0\xb0\xd0\xb5\xd1\x88\xd1\x8c \xd0\xb4/\xd0\xb7 \xd0\xb8 \xd1\x80\xd0\xb0\xd1\x81\xd0\xbf\xd0\xb8\xd1\x81\xd0\xb0\xd0\xbd\xd0\xb8\xd0\xb5. \xd0\x92\xd1\x81\xd1\x91, \xd1\x87\xd1\x82\xd0\xbe \xd1\x82\xd1\x8b \xd0\xb7\xd0\xb0\xd0\xbf\xd0\xb8\xd1\x81\xd1\x8b\xd0\xb2\xd0\xb0\xd0\xb5\xd1\x88\xd1\x8c \xd1\x81\xd1\x8e\xd0\xb4\xd0\xb0, \xd0\xb1\xd1\x83\xd0\xb4\xd0\xb5\xd1\x82 \xd1\x81\xd1\x80\xd0\xb0\xd0\xb7\xd1\x83 \xd0\xb2\xd0\xb8\xd0\xb4\xd0\xbd\xd0\xbe \xd0\xb8 \xd1\x82\xd0\xb2\xd0\xbe\xd0\xb8\xd0\xbc \xd0\xbe\xd0\xb4\xd0\xbd\xd0\xbe\xd0\xba\xd0\xbb\xd0\xb0\xd1\x81\xd1\x81\xd0\xbd\xd0\xb8\xd0\xba\xd0\xb0\xd0\xbc. \xd0\xa2\xd0\xb5\xd0\xb1\xd0\xb5 \xd0\xb1\xd0\xbe\xd0\xbb\xd1\x8c\xd1\x88\xd0\xb5 \xd0\xbd\xd0\xb5 \xd0\xbf\xd1\x80\xd0\xb8\xd0\xb4\xd1\x91\xd1\x82\xd1\x81\xd1\x8f \xd0\xb6\xd0\xb4\xd0\xb0\xd1\x82\xd1\x8c \xd0\xbe\xd1\x82\xd0\xb2\xd0\xb5\xd1\x82\xd0\xb0 \xd0\xbe\xd1\x82 \xd1\x82\xd0\xb2\xd0\xbe\xd0\xb8\xd1\x85 \xd0\xbe\xd0\xb4\xd0\xbd\xd0\xbe\xd0\xba\xd0\xbb\xd0\xb0\xd1\x81\xd1\x81\xd0\xbd\xd0\xb8\xd0\xba\xd0\xbe\xd0\xb2 \xd0\xb2 \xd0\xbc\xd0\xb5\xd1\x81\xd1\x81\xd0\xb5\xd0\xbd\xd0\xb4\xd0\xb6\xd0\xb5\xd1\x80\xd0\xb0\xd1\x85 \xd0\xb8\xd0\xbb\xd0\xb8 \xd0\xbd\xd0\xb0\xd0\xbe\xd0\xb1\xd0\xbe\xd1\x80\xd0\xbe\xd1\x82 \xd0\xbe\xd1\x82\xd0\xb2\xd0\xb5\xd1\x87\xd0\xb0\xd1\x82\xd1\x8c \xd0\xb8\xd0\xbc. \xd0\xa7\xd1\x82\xd0\xbe\xd0\xb1\xd1\x8b \xd0\xbd\xd0\xb0\xd1\x87\xd0\xb0\xd1\x82\xd1\x8c \xd0\xbf\xd0\xbe\xd0\xbb\xd1\x8c\xd0\xb7\xd0\xbe\xd0\xb2\xd0\xb0\xd1\x82\xd1\x8c\xd1\x81\xd1\x8f \xd0\xbf\xd1\x80\xd0\xb8\xd0\xbb\xd0\xbe\xd0\xb6\xd0\xb5\xd0\xbd\xd0\xb8\xd0\xb5\xd0\xbc, \xd0\xbd\xd0\xb0\xd0\xb4\xd0\xbe \xd0\xb2\xd0\xbe\xd0\xb9\xd1\x82\xd0\xb8 \xd0\xb2 \xd0\xb0\xd0\xba\xd0\xba\xd0\xb0\xd1\x83\xd0\xbd\xd1\x82.",\n                style = MaterialTheme.typography.body2\n            )\n            Spacer(modifier = Modifier.height(20.dp))\n            LargeButton(onClick = { /*TODO*/ }, secondary = true) {\n                Text("\xd0\xa3 \xd0\xbc\xd0\xb5\xd0\xbd\xd1\x8f \xd1\x83\xd0\xb6\xd0\xb5 \xd0\xb5\xd1\x81\xd1\x82\xd1\x8c \xd0\xb0\xd0\xba\xd0\xba\xd0\xb0\xd1\x83\xd0\xbd\xd1\x82")\n            }\n            Spacer(modifier = Modifier.height(10.dp))\n            LargeButton(onClick = { /*TODO*/ }) {\n                Text("\xd0\xaf \xd1\x82\xd1\x83\xd1\x82 \xd0\xb2 \xd0\xbf\xd0\xb5\xd1\x80\xd0\xb2\xd1\x8b\xd0\xb9 \xd1\x80\xd0\xb0\xd0\xb7")\n            }\n        }\n    }\n}\n\n
Run Code Online (Sandbox Code Playgroud)\n

截图

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n
深色主题浅色主题
黑暗主题截图在此输入图像描述
\n
\n

如果您需要更多代码,请问我,我会提供

\n

Gab*_*tti 29

中的颜色Textcolor参数或应用TextStyle. 默认值为Color.Unspecified
如果 color =Color.Unspecified且 style 没有设置颜色,则如果未指定,这将LocalContentColor提供默认颜色。Color.Black

您有不同的选择:

  • 您可以添加作为父容器Surface。在这种情况下,它将使用Colors.onSurface您的主题中指定的内容。
    Surface(){
      Column(){
        Text(){...}
      }
    }
Run Code Online (Sandbox Code Playgroud)
  • 使用可组合color项中的参数Text

  • 使用style参数:

Text(style = LocalTextStyle.current.copy(color = Red)){...}
Run Code Online (Sandbox Code Playgroud)
  • 使用自定义颜色LocalContentColor覆盖默认颜色Black
CompositionLocalProvider(LocalContentColor provides MaterialTheme.colors.xxx) {
      Text()
}
Run Code Online (Sandbox Code Playgroud)

  • 谢谢!用“Surface”包装内容对我很有帮助! (4认同)

Phi*_*hov 5

您可以Text使用 usingcolor或 usingstyle值指定颜色。

当没有为这两个指定值时,Text撰写时将使用LocalContentColor值,该值是默认值Black并且不依赖于主题

如果您想更改整个应用程序的默认文本颜色,最好的解决方案是在引入主题后立即覆盖此值:

setContent {
    YourTheme {
        CompositionLocalProvider(
            LocalContentColor provides MaterialTheme.colors.onSecondary // replace this with needed color from your pallete
        ) {
            Content()
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

CompositionLocalProvider您也可以使用应用程序的任何部分再次覆盖此值