通过获取行数来截取相应的字数再拼接自己想要的结尾就行 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; } });