android TextView lineHeight 是什么 ?
一 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+ 支持)
<TextViewandroid:textSize="20sp"android:lineHeight="28sp" />
需要 API 28(Android 9)及以上 才能用
android:lineHeight
属性。
✅ 方法 2:间接控制(通用方式)
<TextViewandroid: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
✅ 推荐数值关系:
属性 | 推荐写法 |
---|---|
lineHeight | textSize × 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:强制单行显示,保持视觉对齐
<TextViewandroid: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 | 按视觉要求设定 |
lineHeight | textSize × 1.2 ~ 1.4 ,保证呼吸感 |
layout_height | ≥ lineHeight ,单行建议直接相等 |
多行段落 | 用 wrap_content 并设置 lineSpacingExtra |
精准单行 | 用固定 layout_height 并关闭 fontPadding |