Jetpack Compose 文本框标签无法保持居中。

3
我正在尝试创建一个相当小的文本字段(32.dp)。这样做时,标签被推到底部,我找不到保持其居中的方法?我已经尝试使用TextAlign.center,但没有成功。
TextField(
            modifier = Modifier
                .height(32.dp)
                .padding(horizontal = 8.dp)
                .border(1.dp, colorResource(id = R.color.mono4), RoundedCornerShape(32.dp))
                .constrainAs(commentBox) {
                    top.linkTo(parent.top)
                    bottom.linkTo(parent.bottom)
                    start.linkTo(profilePhoto.end)
                    end.linkTo(postText.start)
                    width = Dimension.fillToConstraints
                    height = Dimension.fillToConstraints
                },
            label = {
                Text(
                    textAlign = TextAlign.Center,
                    text = "Comment on workout...",
                    style = TextStyle(
                        fontSize = 14.sp,
                        color = colorResource(id = R.color.mono4),
                        fontFamily = FontFamily(Font(R.font.josefin_san_regular))
                    )
                )
            },
            colors = TextFieldDefaults.textFieldColors(
                backgroundColor = Color.Transparent,
                focusedIndicatorColor = Color.Transparent,
                unfocusedIndicatorColor = Color.Transparent
            ),
            value = commentText,
            onValueChange = { commentText = it }
        )

enter image description here

1个回答

2

这是内部行为,您需要更改源代码来修复它,或者实现自己的可组合性,类似于:

@OptIn(ExperimentalAnimationApi::class)
@Composable
fun TinyTextCapture(){
    var value by remember { mutableStateOf("") }
    Box(contentAlignment = Alignment.Center){
        TextField(
            modifier = Modifier.height(32.dp),
            value = value, onValueChange = { value = it }
        )
        AnimatedVisibility(visible = value.isEmpty()) {
            Text("Label")
        }
    }

}

默认的标签参数有一个默认的上部填充,这就是为什么它被视为向下推动的原因。如果我是你,我不会去编辑像TextField这样基本的东西的源代码,因为它有太多的内部依赖关系,这一切都是一团糟。
您也可以不使用AnimatedVisibility,并应用ConstraintLayout将其放置在TextField的开始位置,而不是当前的绝对居中位置。 Works like a charm 这个效果非常好。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接