要实现TextView的三行显示,多余部分省略,并在后面添加显示全文字样,可以通过自定义TextView来实现。下面是一个实现的示例代码:

import android.content.Context
import android.graphics.Canvas
import android.text.Layout
import android.text.StaticLayout
import android.text.TextPaint
import android.util.AttributeSet
import androidx.appcompat.widget.AppCompatTextView

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

    private val ellipsis = "...显示全文" // 省略号和显示全文文字

    override fun onDraw(canvas: Canvas?) {
        val text = text
        val layout = layout
        if (layout != null && text.isNotEmpty()) {
            val lineCount = layout.lineCount
            if (lineCount > 0) {
                val ellipsisCount = paint.breakText(
                    text.toString(),
                    true,
                    width.toFloat() - paint.measureText(ellipsis),
                    null
                )
                if (lineCount > 3) {
                    val lastLineIndex = layout.getLineEnd(2)
                    val truncatedText = text.subSequence(0, lastLineIndex - ellipsisCount)
                    val truncatedLayout = StaticLayout(
                        truncatedText,
                        paint,
                        width,
                        Layout.Alignment.ALIGN_NORMAL,
                        1.0f,
                        0.0f,
                        false
                    )
                    truncatedLayout.draw(canvas)
                    canvas?.drawText(ellipsis, truncatedLayout.getLineWidth(2), truncatedLayout.getLineBottom(2).toFloat(), paint)
                } else {
                    super.onDraw(canvas)
                }
            }
        } else {
            super.onDraw(canvas)
        }
    }
}

在上面的代码中,我们继承了AppCompatTextView,并重写了onDraw方法。在onDraw方法中,我们首先获取到TextView的文字内容和布局信息。然后判断文字是否为空,并检查布局是否存在。接着获取布局的行数,如果行数大于3,则需要进行省略处理。

通过调用paint的breakText方法,我们可以获取到最后一行能够容纳的文字数量(不包括省略号和显示全文文字)。然后根据最后一行的索引,截取原始文字的前面部分,并创建一个新的StaticLayout来绘制省略后的文字。

最后,我们在画布上绘制省略号和显示全文文字,位置为最后一行的末尾。

要在布局中使用这个自定义TextView,可以在XML文件中添加以下代码:

<包名.EllipsizeTextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:maxLines="3"
    android:ellipsize="none"
    android:text="这里是要显示的文字内容"
    />

注意要替换掉<包名.EllipsizeTextView>中的包名为你的包名。

这样就可以实现在TextView的三行显示,多余部分省略,并在后面添加显示全文字样的效果了

Android kotlin 自定义TextView三行显示多与部分省略并在后面添加显示全文字样 详细代码与实现

原文地址: https://www.cveoy.top/t/topic/iYrH 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录