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

Jetpack Compose(M3):实现最小36dp且自适应高度的多行输入框

解决方案

要实现最小高度36dp且多行自动扩展的Outlined样式输入框,核心是调整OutlinedTextFieldDefaults.DecorationBox的默认最小高度限制,同时配合BasicTextField的多行配置:

  1. 覆盖DecorationBox的默认最小高度
    外部的.heightIn或defaultMinSize会被DecorationBox自身的默认56dp最小高度覆盖,必须在DecorationBox的modifier里设置defaultMinSize(minHeight = 36.dp)才能生效。

  2. 适配36dp高度调整内容内边距
    原有的内边距会导致36dp高度下文本显示异常,需调整为更紧凑的数值,保证文本区域高度适配。

  3. 开启多行模式并允许高度自适应
    确保BasicTextField的singleLine设为false,同时用wrapContentHeight()让高度随内容自动扩展,搭配heightIn(min = 36.dp)锁定最小高度。

完整示例代码:

BasicTextField(
    value = text,
    onValueChange = { text = it },
    singleLine = false, // 开启多行模式
    modifier = modifier
        .heightIn(min = 36.dp) // 设定最小高度
        .wrapContentHeight() // 允许高度随内容扩展
        .fillMaxWidth(),
    decorationBox = @Composable { innerTextField ->
        OutlinedTextFieldDefaults.DecorationBox(
            value = text,
            innerTextField = innerTextField,
            enabled = true,
            singleLine = false, // 与BasicTextField保持一致
            visualTransformation = VisualTransformation.None,
            contentPadding = PaddingValues(horizontal = 16.dp, vertical = 6.dp), // 适配36dp高度的内边距
            modifier = Modifier
                .defaultMinSize(minHeight = 36.dp) // 覆盖DecorationBox默认最小高度
        )
    }
)

关键说明

  • OutlinedTextFieldDefaults.DecorationBox内部默认使用OutlinedTextFieldDefaults.MinHeight(56dp),这是之前外部高度设置无效的核心原因,必须在它的modifier里重写最小高度。
  • wrapContentHeight()确保输入框在内容换行时自动增高,heightIn(min=36.dp)保证空输入或单行时保持36dp的基础高度。
  • 调整contentPadding是为了让文本在36dp高度内有合适的上下间距,避免文字被裁剪或过于拥挤。

内容的提问来源于stack exchange,提问作者aj3423

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 11:42:44