Jetpack Compose中BasicTextField首字母部分截断问题求助
解决Compose文本输入框首字母截断问题
你的输入框出现首字母截断,核心原因是内容内边距设置为0,加上IntrinsicSize.Min计算宽度时未预留文本绘制的偏移空间,导致文本与输入框边界重叠。
修复方案:
- 调整
TextFieldDecorationBox的contentPadding,为左右添加最小内边距,避免文本贴边被截断 - 若使用特殊字体,可额外给
BasicTextField添加细微的左侧内边距补偿字体偏移
修改后的代码:
Box(modifier = Modifier .widthIn(0.dp, 200.dp)) { BasicTextField( modifier = Modifier .width(IntrinsicSize.Min) .focusRequester(focusRequester), value = textFieldValue, onValueChange = { if (it.text.length <= 20) { textFieldValue = it onValueChange(tag.id.orEmpty(), it.text) } }, enabled = !tag.isDeleted, singleLine = true, maxLines = 1, textStyle = TextStyle( fontSize = 13.sp, color = if (tag.isDeleted) Contrast_Low.copy(alpha = 0.5f) else Contrast_Higher, fontFamily = INTER_FONT, ), decorationBox = { TextFieldDefaults.TextFieldDecorationBox( enabled = !tag.isDeleted, innerTextField = it, interactionSource = MutableInteractionSource(), singleLine = true, value = textFieldValue.text, visualTransformation = VisualTransformation.None, // 添加左右内边距,避免文本贴边截断 contentPadding = PaddingValues(top = 0.dp, bottom = 0.dp, start = 4.dp, end = 4.dp) ) } ) }
如果使用INTER_FONT仍有轻微截断,可给BasicTextField的modifier追加左侧内边距补偿:
modifier = Modifier .width(IntrinsicSize.Min) .padding(start = 2.dp) .focusRequester(focusRequester),
内容的提问来源于stack exchange,提问作者Abdullah Ejaz
相关产品推荐
相关产品推荐

