You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jetpack Compose TextField光标被占位符遮挡?如何置光标于上层?

解决Jetpack Compose TextField光标被占位符遮挡的问题

这不是Jetpack Compose的Bug,是因为默认情况下TextField的占位符绘制层级高于光标,当你给占位符文本设置fillMaxWidth并居中后,光标就会被遮挡。

最简单的解决方式是给占位符的Text添加Modifier.zIndex(-1f),降低它的Z轴层级,让光标显示在上方:

@Composable
fun TextFieldWithPlaceholder() {
    val text = rememberSaveable {
        mutableStateOf("")
    }
    Box(modifier = Modifier
        .fillMaxSize()
        .background(MaterialTheme.colors.background)) {

        TextField(
            modifier = Modifier
                .background(Color.Blue)
                .size(width = 300.dp, height = 50.dp),
            value = text.value,
            onValueChange = { value ->
                text.value = value
            },
            singleLine = true,
            colors = TextFieldDefaults.textFieldColors(
                backgroundColor = Color.Transparent,
                focusedIndicatorColor = Color.Transparent,
                unfocusedIndicatorColor = Color.Transparent,
                focusedLabelColor = Color.Transparent,
                unfocusedLabelColor = Color.Transparent,
                placeholderColor = Color.Red,
                cursorColor = Color.White
            ),
            placeholder = {
                Text(
                    modifier = Modifier
                        .fillMaxWidth()
                        .zIndex(-1f), // 关键修改:降低占位符层级
                    textAlign = TextAlign.Center,
                    text = "Placeholder"
                )
            },
            textStyle = MaterialTheme.typography.body2.copy(textAlign = TextAlign.Center)
        )
    }
}

另外,也可以通过自定义TextField的布局逻辑调整绘制顺序,但zIndex的方式最简洁高效,完全能解决你的问题。

内容的提问来源于stack exchange,提问作者Bojan Antić

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 12:02:17