I'm*_*gon 27 android android-layout android-jetpack-compose android-compose-textfield android-jetpack-compose-text
我正在尝试使用TextField()Jetpack Compose。我希望文本颜色为白色。
我发现这有效:
ProvideTextStyle(TextStyle(color = Color.White)) {
TextField(
...
)
}
Run Code Online (Sandbox Code Playgroud)
但是,我想在主题级别覆盖它,这样我就不需要重复编写ProvideTextStyle. 我看到MaterialTheme只接受以下参数:
@Composable
fun MaterialTheme(
colors: Colors = MaterialTheme.colors,
typography: Typography = MaterialTheme.typography,
shapes: Shapes = MaterialTheme.shapes,
content: @Composable () -> Unit
)
Run Code Online (Sandbox Code Playgroud)
所以我不知道该怎么做。有人可以帮忙吗?
(撰写版本 = 1.0.0-alpha11)
Art*_*mes 25
正如Adrian Grygutis在评论中指出的那样,1.0.0,TextField有一个参数colors。您可以TextField通过使用TextFieldDefaults.textFieldColors(...)要更改的参数进行调用来自定义您的。
TextField(
...
colors: TextFieldColors = TextFieldDefaults.textFieldColors(textColor = Color.White),
) {
Run Code Online (Sandbox Code Playgroud)
至于主题,如果你想避免每次都打电话:
ProvideTextStyle(TextStyle(color = Color.White)) {
TextField(
...
)
}
Run Code Online (Sandbox Code Playgroud)
您可以使用自己的一组创建可组合项TextFieldColors,并将其作为参数添加到您的TextField. 例如,您可以将所有颜色设置为白色:
@Composable
fun MyAppTextFieldColors(
textColor: Color = Color.White,
disabledTextColor: Color = Color.White,
backgroundColor: Color = Color.White,
cursorColor: Color = Color.White,
errorCursorColor: Color = Color.White,
...
) = TextFieldDefaults.textFieldColors(
textColor = textColor,
disabledTextColor = disabledTextColor,
backgroundColor = backgroundColor,
cursorColor = cursorColor,
errorCursorColor = errorCursorColor,
...
)
Run Code Online (Sandbox Code Playgroud)
为了避免在 every 中调用此方法TextField,您可以MyAppTextField为您的应用创建一个自定义,以TextField您的自定义TextFieldColors作为默认参数来调用默认值:
@Composable
fun MyAppTextField(
value: String,
onValueChange: (String) -> Unit,
modifier: Modifier = Modifier,
...
colors: TextFieldColors = MyAppTextFieldColors(),
) {
TextField(
value = value,
onValueChange = onValueChange,
modifier = modifier,
...
colors = colors,
)
}
Run Code Online (Sandbox Code Playgroud)
这样,您只需要调用MyAppTextField. 如果需要的话,这是覆盖从主题继承的颜色的好方法。
Gab*_*tti 14
M2TextField contentColor基于LocalContentColor.current. 您可以使用CompositionLocalProvider来提供自定义LocalContentColor.
您可以定义自定义函数,例如:
@Composable
fun ContentColorComponent(
contentColor: Color = LocalContentColor.current,
content: @Composable () -> Unit
) {
CompositionLocalProvider(LocalContentColor provides contentColor,
content = content)
}
Run Code Online (Sandbox Code Playgroud)
它可以与许多组件一起使用,例如TextField:
ContentColorComponent(contentColor = Color.Blue) {
TextField(
value = text,
onValueChange = { text = it },
label = { Text("Label") }
)
}
Run Code Online (Sandbox Code Playgroud)
Om *_*mar 14
我想在主题级别覆盖它
MaterialTheme修改应用主题可组合项中的可组合项内容以包含 TextStyle。
@Composable
fun MyAppTheme(
darkTheme: Boolean = isSystemInDarkTheme(),
content: @Composable() () -> Unit
) {
val colors = if (darkTheme) {
DarkColorPalette
} else {
LightColorPalette
}
MaterialTheme(
colors = colors,
typography = Typography,
shapes = Shapes,
content = {
ProvideTextStyle(
value = TextStyle(color = Color.White),
content = content
)
}
)
}
Run Code Online (Sandbox Code Playgroud)
现在您提供的TextStyle将在应用程序主题级别使用。
setContent {
MyAppTheme {
// app content
}
}
Run Code Online (Sandbox Code Playgroud)
您1.0.0-beta07可以使用该textStyle属性来覆盖样式,从而覆盖内容颜色。另请参阅设置 TextField 样式。
TextField(
...
textStyle = TextStyle(color = Color.Blue)
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
30229 次 |
| 最近记录: |