通过获取行数来截取相应的字数再拼接自己想要的结尾就行
layout = text_content.getLayout();
count = text_content.getLineCount();
这里用getViewTreeObserver().addOnPreDrawListener
是因为textview有个绘制的时间,等绘制完才能获取到行数
text_content.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
@Override
public boolean onPreDraw() {
//这个监听的回调是异步的,在监听完以后一定要把绘制监听移除,不然这个会一直回调,导致界面错乱
text_content.getViewTreeObserver().removeOnPreDrawListener(this);
layout = text_content.getLayout();
count = text_content.getLineCount();
if(count>3){
SpannableStringBuilder builder = new SpannableStringBuilder();
int end = layout.getLineStart(3);
builder.append(spannableString.toString().substring(0, end-4))
.append("...")
.append("全文")
.setSpan(clickableSpan, 0, huaTi.length()+1, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
builder.setSpan(new ForegroundColorSpan(getContext().getResources().getColor(R.color.blue_shense)),
0, huaTi.length()+2, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
builder.setSpan(new ForegroundColorSpan(getContext().getResources().getColor(R.color.blue_shense)),
end-4, builder.length(), Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
builder.setSpan(clickableSpan2,huaTi.length()+1,builder.length(),Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
text_content.setText(builder);
}else {
//原来的
spannableString.setSpan(new ForegroundColorSpan(getContext().getResources().getColor(R.color.blue_shense)),
0, huaTi.length()+2, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
spannableString.setSpan(clickableSpan,0,huaTi.length()+1,Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
spannableString.setSpan(clickableSpan2,huaTi.length()+1,spannableString.length(),Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
text_content.setText(spannableString);
}
return true;
}
});
TextView类似朋友圈可点击超链接以及缩放
最新推荐文章于 2024-08-22 15:28:40 发布
这段代码展示了如何在TextView中动态截取文本内容,当内容超过三行时,添加省略号和全文按钮。通过使用addOnPreDrawListener确保在文本绘制完成后获取行数,并使用SpannableStringBuilder构建带有点击事件的省略号和全文。这样可以有效地管理和展示长文本。
260

被折叠的 条评论
为什么被折叠?



