一 lineHeight是什么

在 Android 中,lineHeight 表示的是 TextView 中一行文本所占的总高度,它控制的是 每一行文字的“垂直占位空间”,而不是文字本身的大小(这由 textSize 决定)。


✅ 官方定义简化:

lineHeight = 字体本身的高度(textSize) + 行间距(leading)

或者:

lineHeight = textSize × lineSpacingMultiplier + lineSpacingExtra

🧠 举例说明:

假设:

android:textSize="20sp"
android:lineSpacingExtra="4dp"
android:lineSpacingMultiplier="1.0"

那:

lineHeight = 20sp * 1.0 + 4dp = 24dp

也就是说,每一行文字实际会占用 24dp 的垂直空间,这包括字符上方和下方的留白,视觉上会“更通透”。


📌 lineHeight ≠ textSize

属性含义
textSize字体大小,控制字符本身的尺寸(不含上下留白)
lineHeight一行所占空间,含字符上/下 baseline 留白
layout_height控件本身的高度,必须 ≥ 行高,否则可能裁剪

🛠 在 XML 中如何设置 lineHeight?

✅ 方法 1:直接设置(API 28+ 支持)

<TextView
    android:textSize="20sp"
    android:lineHeight="28sp" />

需要 API 28(Android 9)及以上 才能用 android:lineHeight 属性。


✅ 方法 2:间接控制(通用方式)

<TextView
    android:textSize="20sp"
    android:lineSpacingExtra="4dp"
    android:lineSpacingMultiplier="1.1" />

这种方式兼容性更好,适用于所有 Android 版本。


👀 小技巧:如何让单行文字也生效?

默认 lineHeight 只有在多行文字时才明显,但如果希望单行文字也受到控制,可加:

android:maxLines="1"
android:includeFontPadding="false"
android:gravity="center"

🧪 视觉对比(假设 textSize=20sp)

设置方式效果(lineHeight)
默认(无 spacing 设置)与 textSize 基本一致
lineSpacingExtra=4dp高出 4dp
lineHeight=28sp强制设为 28sp ✅

✅ 总结

属性控制内容是否推荐
textSize字体本体大小✅ 必须设置
lineHeight单行所占高度(包含上下空间)✅ API 28+
lineSpacingExtra / Multiplier控制行间距,兼容性好✅ 推荐
layout_height控件容器高,必须 ≥ lineHeight⚠️ 很重要

如果目标是 字体看起来不拥挤、多行文字更舒服,设置 lineHeight 或 lineSpacingExtra 是非常关键的。

二 一般TextView控件lineHeight,textSize和layout_height应该如何设计

在实际 Android 项目中,lineHeight、textSize 和 layout_height 的合理设计,直接关系到文字的显示是否清晰、是否居中、是否被裁剪等问题。


✅ 三者概念回顾

属性含义单位作用
textSize字体大小sp控制文字本体的大小
lineHeight每一行文字占用的垂直空间dp or sp控制上下留白,让文字不拥挤
layout_height控件容器高度dp控制整体显示空间,必须 ≥ lineHeight

🎯 设计原则(最实用的经验总结)

✅ 基础规则:

textSize ≤ lineHeight ≤ layout_height

✅ 推荐数值关系:

属性推荐写法
lineHeighttextSize × 1.2 ~ 1.4 之间
layout_height与 lineHeight 相等或略大(一般 = lineHeight)

🧠 举例说明(最佳实践)

示例 1:单行标题文字

android:textSize="24sp"
android:lineHeight="32sp"
android:layout_height="32dp"

说明:

  • 字体大小为 24sp,适中可读;
  • 行高 32sp,提供 8sp 的上下缓冲;
  • 容器高度等于行高,文字居中显示;

示例 2:正文多行文字

android:textSize="16sp"
android:lineHeight="24sp"
android:layout_height="wrap_content"

说明:

  • 字体大小合适阅读;
  • 行高提升 8sp,段落不会挤压;
  • 使用 wrap_content 自适应多行;

示例 3:强制单行显示,保持视觉对齐

<TextView
    android:textSize="20sp"
    android:lineHeight="24sp"
    android:layout_height="24dp"
    android:maxLines="1"
    android:includeFontPadding="false"
    android:gravity="center_vertical"/>

推荐关闭 includeFontPadding,更精确对齐视觉中心


🔍 layout_height 有哪些设计方式?

设置方式使用场景风险
wrap_content多行文本,内容不确定时 ✅会受 font padding 影响,可能偏移
固定 dp(如 48dp)精准 UI 控件/按钮 ✅要手动匹配好 textSize 和 lineHeight
match_parent辅助居中对齐父控件 ✅父控件必须有确定高度

🧑‍🎨 UI/UX 理想设计建议给 UI 设计师:

设计稿中标注 font-size、line-height 和 控件高度 时,请确保满足:

  • line-height ≥ font-size
  • 控件高度 ≥ line-height
  • 若使用大字号,请至少给 lineHeight = fontSize + 20%
  • 单行文字推荐 lineHeight = layout_height

✅ 总结

属性建议设置
textSize按视觉要求设定
lineHeighttextSize × 1.2 ~ 1.4,保证呼吸感
layout_height≥ lineHeight,单行建议直接相等
多行段落用 wrap_content 并设置 lineSpacingExtra
精准单行用固定 layout_height 并关闭 fontPadding

更多推荐