textContent.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() { @Override public boolean onPreDraw() { //这个监听的回调是异步的,在监听完以后一定要把绘制监听移除,不然这个会一直回调,导致界面错乱 textContent.getViewTreeObserver().removeOnPreDrawListener(this); //获取字行数 int lineCount = textContent.getLineCount(); //55是左右的margin int windowWidth = ScreenUtils.getScreenWidth()-55; int zNumber = Math.round(windowWidth/textContent.getTextSize()); if(lineCount>3){ SpannableStringBuilder builder = new SpannableStringBuilder(); //减6是为了加上...跟全文 String substring = spannableString.toString().substring(0, zNumber * 3 - 6); if(!TextUtils.isEmpty(huaTi)){ builder.append(substring) .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)), builder.length()-5, builder.length(), Spannable.SPAN_INCLUSIVE_EXCLUSIVE); builder.setSpan(clickableSpan2,huaTi.length()+1,builder.length(),Spannable.SPAN_INCLUSIVE_EXCLUSIVE); textContent.setText(builder); }else { builder.append(substring) .append("...") .append("全文") .setSpan(clickableSpan2, 0, builder.length(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE); builder.setSpan(new ForegroundColorSpan(getContext().getResources().getColor(R.color.blue_shense)), builder.length()-5, builder.length(), Spannable.SPAN_INCLUSIVE_EXCLUSIVE); textContent.setText(builder); } }else{ //原来的 if(!TextUtils.isEmpty(huaTi)){ 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); textContent.setText(spannableString); } return true; } });
TextView用SpannableStringBuilder加全文以及不同点击事件
最新推荐文章于 2024-07-19 21:00:26 发布