TextView在...后加入内容

298 阅读1分钟
问题描述:

文本后需要加指定内容,超出maxline需要展示...,且需要兼容后面添加的内容。 比如,在文本最后添加箭头,或者文本最后添加高亮文本查看更多等。

解决方法:
val drawable = context.resources.getDrawable(R.mipmap.*)
drawable.setBounds(0, 0, drawable.intrinsicWidth, drawable.intrinsicHeight) 
val imageSpan = ImageSpan(drawable, ImageSpan.ALIGN_CENTER) 
val ellipsizeText = TextUtils.ellipsize( 
            content, 
            textView.paint, 
            (getScreenWidth() - 42.dp()) * 2 - 48.dp().toFloat(), // 48 图片宽度, 42距离屏幕间距 
            TextUtils.TruncateAt.END ) 
val spannableString = SpannableStringBuilder() 
    spannableString.apply { 
    append(ellipsizeText) 
    append(" ") 
    setSpan(
        imageSpan, 
        spannableString.length -1,
        spannableString.length,
        Spanned.SPAN_INCLUSIVE_EXCLUSIVE) 
} 
textView.text = spannableString

这个例子是在文本后添加一个drawable,如果maxline=1,是可以直接在xml中添加drawableEnd的,但是多行的drawable高度会对齐textview。 其中最关键的是TextUtils.ellipsize方法,参数分别是 需要计算长度的文本,textview.paint,截断时文本的长度(长度= (屏幕宽度-间距)* maxline - drawable宽度),文本截断方式。 最后设置span就可以了。