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

如何在Android中实现Figma的Vertical Trim功能?

在Android中实现类似Figma Vertical Trim的文本垂直边距优化方案

可以在Android中实现类似Figma Vertical Trim的文本垂直边距控制,下面针对你遇到的android:includeFontPadding="false"的缺陷,提供几种可行方案:

一、自定义TextView基于字体度量值精准调整边距

includeFontPadding="false"的核心问题是它依赖系统默认的字体padding规则,无法适配带重音的特殊字符,也不能彻底消除底部冗余边距。我们可以通过直接读取字体的度量参数(ascent、descent、top、bottom)来手动控制文本的上下边距:

实现思路

  1. 获取当前TextView使用字体的Paint.FontMetrics对象,其中:
    • top:字符顶部到基线的最大距离(包含重音等装饰)
    • ascent:常规字符顶部到基线的距离
    • descent:常规字符底部到基线的距离
    • bottom:字符底部到基线的最大距离
  2. 计算需要移除的冗余padding:顶部取top - ascent,底部取bottom - descent
  3. 在自定义TextView中动态调整内边距,确保既去掉冗余空间,又不裁剪特殊字符的重音部分

代码示例

class TrimTextView @JvmOverloads constructor(
    context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0
) : AppCompatTextView(context, attrs, defStyleAttr) {

    override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec)
        adjustVerticalPadding()
    }

    private fun adjustVerticalPadding() {
        val fontMetrics = paint.fontMetrics
        // 计算需要移除的顶部冗余padding(保留top避免裁剪重音)
        val topPadding = paddingTop + (fontMetrics.ascent - fontMetrics.top).toInt()
        // 计算需要移除的底部冗余padding
        val bottomPadding = paddingBottom + (fontMetrics.descent - fontMetrics.bottom).toInt()
        setPadding(paddingLeft, topPadding, paddingRight, bottomPadding)
    }
}

二、Jetpack Compose中的实现方案

如果你的项目使用Jetpack Compose,可以直接利用Text组件的leadingTrim参数(Compose 1.4+支持),它和CSS的leading-trim、Figma的Vertical Trim逻辑一致:

Text(
    text = "Ś Ć 测试文本",
    style = TextStyle(
        leadingTrim = LeadingTrim(
            firstLine = TrimType.Both,
            restLines = TrimType.Both
        ),
        lineHeight = 24.sp
    )
)

三、补充说明

你提到的Google Fonts文章中提到的leading-trim概念,在原生View系统中没有直接对应的系统API,但通过上述自定义TextView的方式,可以实现完全对齐的效果。需要注意:

  • 不同字体的度量参数差异较大,建议针对项目中使用的字体单独测试调整
  • 若需要支持多语言特殊字符,务必保留fontMetrics.top和fontMetrics.bottom对应的空间,避免裁剪

文本垂直间距对比

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 01:17:35