0

我正在尝试使用 StaticLayout 绘制多行文本,但setMaxLines()似乎不起作用。这是我的代码:

val eventText = StaticLayout.Builder
    .obtain(event.title, 0, event.title.length, eventTextPaint, (contentWidth / 7f).toInt())
    .setMaxLines(2)
    .build()
withTranslation(event.left, event.top * scale) {
    eventText.draw(this)
}

但是所有的文本都是 5 行长的。如果我添加setEllipsize(TextUtils.TruncateAt.END),我会得到两行代码,但最后是“...”,这是我不想要的。我究竟做错了什么?还是建造者坏了?

在此处输入图像描述

4

1 回答 1

0

设置最大行数不会截断StaticLayout中的文本,而是向其他代码(例如TextView)指定要显示的行数。

例如,使用下面的TextView定义

<TextView
    android:id="@+id/textView"
    android:layout_width="100dp"
    android:layout_height="wrap_content"
    android:maxLines="2"
    android:text="This is some long text that spans more than two lines. This is some long text that spans more than two lines. This is some long text that spans more than two lines"/>

并在TextView代码中设置断点,我们在断点处看到以下内容。在TextView的方法中,定义了一个裁剪矩形,其底部设置为第 1 行(第二行)的底部。正是这段代码限制了要显示的行数。布局中的文本是长文本,但只显示两行。onDraw()

在此处输入图像描述

显示的内容:

在此处输入图像描述

您将需要执行类似的操作来限制显示的行数,或者您可以检查StaticLayout并截断第二行的字符数。

于 2022-02-16T13:39:43.150 回答