Jetpack Compose中Text组件lineHeight为0.em时内边距异常问题咨询
Jetpack Compose Text组件lineHeight设为0.em反而行间距更大的原因
核心原因是Jetpack Compose的Text组件对lineHeight的取值有约束逻辑:
- 当设置的
lineHeight小于字体本身的最小行高(即字体文件定义的ascent到descent的总高度,也就是字符本身占据的高度)时,Compose会忽略该设置,自动回退使用字体自带的默认行高(包含字体设计时预留的上下空白,即leading)。 - 你设置的
0.em明显远小于字体的最小行高,因此第二列Text实际使用的是字体默认行高;而第一列的2.em是基于20.sp计算出的明确行高(2 * 20.sp = 40.sp),如果该值小于字体默认行高,就会出现第二列行间距更大的情况。
补充:em单位与当前fontSize绑定,n.em等价于n * fontSize。
解决方法
如果需要更小的行间距,可以尝试以下方式:
- 避免设置
0.em,改为设置不小于字体最小行高的具体值。你可以通过fontFamily.resolve(LocalContext.current).fontMetrics获取字体的具体参数,然后设置略大于ascent绝对值与descent之和的行高。 - 若要进一步压缩行内空白,可将
lineHeightStyle的trim属性设置为LineHeightStyle.Trim.Both,Compose会自动裁剪行高内多余的空白空间:
lineHeightStyle = LineHeightStyle( alignment = LineHeightStyle.Alignment.Center, trim = LineHeightStyle.Trim.Both )
内容的提问来源于stack exchange,提问作者jgnt32
相关产品推荐
相关产品推荐

