android 如何更改Jectpack编写BasicTextField的文本颜色?

czfnxgou  于 2022-11-27  发布在  Android
关注(0)|答案(3)|浏览(220)

我正在尝试使用BasicTextField创建搜索栏。
默认的文本颜色是黑色,我找不到任何选项来更改文本颜色。
此外,我需要改变文字大小,字体和其他属性。

@Composable
fun MyBasicTextField(){
    var text by remember { mutableStateOf("Hello") }
    BasicTextField(
        value = text,
        onValueChange = {
            text = it
        },
        decorationBox = { ... },
        modifier = Modifier
            .fillMaxWidth()
            .background(Color.DarkGray, CircleShape)
            .padding(10.dp)
    )
}

如果通过BasicTextField无法实现,是否有其他方法可以创建类似视图?
我试过TextField,但有几个问题,如删除标签,高度,背景...

pokxtpni

pokxtpni1#

您需要textStyle参数。如果您喜欢使用默认文本样式,请使用LocalTextStyle

BasicTextField(
    // ...
    textStyle = LocalTextStyle.current.copy(color = Color.White)
)

也可以使用以下材质样式之一:

BasicTextField(
    // ...
    textStyle = MaterialTheme.typography.body1.copy(color = Color.White)
)
mlmc2os5

mlmc2os52#

除了其他的回答,这对我在添加textStyle属性时起了作用:

textStyle = TextStyle(
                        color = Color.White, 
                        fontFamily = FontFamily.SansSerif,
                        fontSize = 14.sp,
                        textAlign = TextAlign.Center,
                    )

下面是您可以设置的所有TextStyle属性:
https://developer.android.com/reference/kotlin/androidx/compose/ui/text/TextStyle

public constructor TextStyle(
        color: Color,
        fontSize: TextUnit,
        fontWeight: FontWeight?,
        fontStyle: FontStyle?,
        fontSynthesis: FontSynthesis?,
        fontFamily: FontFamily?,
        fontFeatureSettings: String?,
        letterSpacing: TextUnit,
        baselineShift: BaselineShift?,
        textGeometricTransform: TextGeometricTransform?,
        localeList: LocaleList?,
        background: Color,
        textDecoration: TextDecoration?,
        shadow: Shadow?,
        textAlign: TextAlign?,
        textDirection: TextDirection?,
        lineHeight: TextUnit,
        textIndent: TextIndent?
    )
omhiaaxx

omhiaaxx3#

如果要使用当前材质主题的颜色以使其适应亮主题和暗主题,则还需要使用LocalContentColor.current

val localStyle = LocalTextStyle.current
val mergedStyle = localStyle.merge(TextStyle(color = LocalContentColor.current))
BasicTextField(
    textStyle = mergedStyle,
    cursorBrush = SolidColor(MaterialTheme.colorScheme.primary),
)

你可能还想把你的光标画笔的颜色从默认的黑色改成黑色,经过一番挖掘,我发现TextField使用的是原色(至少对于Material 3来说是这样)。

相关问题