class TextViewHelper {
/**
* 设置textView结尾...后面显示的文字和颜色
* @param context 上下文
* @param textView textview
* @param minLines 最少的行数
* @param originText 原文本
* @param endText 结尾文字
* @param endColorID 结尾文字颜色id
* @param isExpand 当前是否是展开状态
*/
fun toggleEllipsize(
context: Context,
textView: TextView,
minLines: Int,
originText: String,
endText: String,
endColorID: Int,
isExpand: Boolean
) {
if (TextUtils.isEmpty(originText)) {
return
}
textView.viewTreeObserver.addOnGlobalLayoutListener(object : ViewTreeObserver.OnGlobalLayoutListener {
override fun onGlobalLayout() {
if (isExpand) {
textView.text = originText
} else {
val paddingLeft = textView.paddingLeft
val paddingRight = textView.paddingRight
val paint = textView.paint
val moreText = textView.textSize * (endText.length + 3)
val availableTextWidth = (textView.width - paddingLeft - paddingRight) * minLines - moreText
val ellipsizeStr = TextUtils.ellipsize(
originText, paint,
availableTextWidth, TextUtils.TruncateAt.END
)
if (ellipsizeStr.length < originText.length) {
val temp = ellipsizeStr.toString() + endText
val ssb = SpannableStringBuilder(temp)
ssb.setSpan(
object : ClickableSpan() {
override fun updateDrawState(ds: TextPaint) {
ds.color = ActivityCompat.getColor(context, endColorID)
ds.isAntiAlias = true
ds.isUnderlineText = false
}
override fun onClick(widget: View) {
textView.text = originText
}
},
temp.length - endText.length, temp.length, Spannable.SPAN_INCLUSIVE_EXCLUSIVE
)
textView.text = ssb
} else {
textView.text = originText
}
}
if (Build.VERSION.SDK_INT >= 16) {
textView.viewTreeObserver.removeOnGlobalLayoutListener(this)
} else {
textView.viewTreeObserver.removeGlobalOnLayoutListener(this)
}
}
})
}
}
网友评论