TextView用SpannableStringBuilder加全文以及不同点击事件

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;
    }
});
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

csdn_zxw

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值