Android TextView 行间距的填充

277

我有一个显示长文本的TextView。我想在行之间添加一些空白,就像CSS中的line-height属性一样。我该怎么做?

11个回答

485

您可以在XML文件中使用lineSpacingExtralineSpacingMultiplier


18
lineSpacingMultiplier属性对我很有用,它可接受像这样的浮点数值:android:lineSpacingMultiplier="0.8"。 - Juan Saravia
9
你能解释一下这些是如何工作的吗?这些测量值是从哪里获取的?你能举例说明字体和语言之间的关系吗?例如,行距是从基线测量的,但东亚语言没有基线。默认的行距定义在哪里?是在字体本身中吗? - Christopher Perry
4
好的,请问需要翻译哪些内容? - nibbana
1
当我设置文本背景时,背景也会覆盖填充。 - user1034912

104
如果你想在文字之间增加内边距,可以尝试使用 LineSpacingExtra="10sp"
<TextView
    android:layout_width="match_parent"
    android:layout_height="180dp"
    android:lineSpacingExtra="10sp"/>

对于这种情况应该使用sp而不是dp - Osdward

87

62

这份补充答案展示了更改行间距的效果。

图片描述

您可以使用以下代码设置倍数和/或额外间距:

textView.setLineSpacing(float add, float mult)

或者您可以使用以下方法获取值:

int lineHeight = textView.getLineHeight();
float add = tvSampleText.getLineSpacingExtra();          // API 16+
float mult = tvSampleText.getLineSpacingMultiplier();    // API 16+

公式如下:

lineHeight = fontMetricsLineHeight * mult + add

默认乘数为1,默认额外间距为0


21

添加 android:lineSpacingMultiplier="0.8" 可以将行间距设置为80%。


18
您可以使用 TextView.setLineSpacing(n,m) 函数。

9

您可以在XML文件中使用lineSpacingExtralineSpacingMultiplier

lineSpacingExtra会在TextView的文本行之间添加额外的间距。

<TextView
    android:lineSpacingExtra="4dp" />

lineSpacingMultiplier 作为行间距高度的比例因子:

<TextView
    android:lineSpacingMultiplier="0.8" />

换句话说,每行的高度将会是 height * multiplier + extra

3

您可以使用两个属性


1. lineSpacingExtra: 它用于dp间距。

android:lineSpacingExtra="4dp"

2. lineSpacingMultiplie: 它用于相对比例缩放。

android:lineSpacingMultiplier="0.8"

1

对我有用

只需在您的TextView中添加两行

 android:includeFontPadding="false"
 android:lineSpacingMultiplier="0.8"
<TextView
            android:id="@+id/searchByItemTv"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:fontFamily="@font/dm_sans"
            android:includeFontPadding="false"
            android:lineSpacingMultiplier="0.8"
            android:paddingVertical="3dp"
            android:paddingStart="4dp"
            android:paddingEnd="6dp"
            android:text="@string/date_of_birth"
            android:textColor="@color/text_black"
            android:textSize="16dp" />

注意:不要使用 android:textAppearance=""

之前:enter image description here

之后:enter image description here


0
作为对上述解决方案的扩展回答,
请记住,您可以添加<item name="android:lineHeight">16sp</item>来直接设置行高,但根据上面的文档,行高的工作方式如下 -
Explicit height between lines of text. If set, this will override the values set for lineSpacingExtra and lineSpacingMultiplier.
        <attr name="lineHeight" format="dimension" />

所以请确保只使用lineSpacingExtra & lineSpacingMultiplierlineHeight中的一个。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接