android TextView 使用SpannableString数据源时,TextView的ellipsize失效

这儿遇到个问题,就是TextView单行超过长度使用“...”结束,如果是一般的String类型的数据,就可以直接用ellipsize属性加上singleline就可以了,但是如果数据源是Spannable类型时,那么ellipsize属性就失效了,而且这问题用得比较少,所以也没有给出解决的方式方法,现在遇到了,就记录一下吧!

根据下面的两篇,进行总结的:

1、http://blog.csdn.net/xjlnx/article/details/8951667    这篇文件讲述了出现失效的原因及源码分析。

2、http://stackoverflow.com/questions/14691511/textview-using-spannable-ellipsize-doesnt-work 这篇讲述了该怎么解决的方式


上面的两篇,对于初级人员的我来说,可能有点困难,也有点难理解,于是我就把这两篇慢慢的分析,最终还是给弄出来了,大笑


我是重写了TextView,将里面的onDraw重写下面是我的onDraw的代码:



/**
 * 注意:spannableString 设置Spannable 的对象到spannableString中时,要用Spannable.SPAN_EXCLUSIVE_EXCLUSIVEflag值,不然可能会会出现后面的衔接字符串不会显示
 */
@Override
protected void onDraw(Canvas canvas) {
    CharSequence charSequence = getText() ;
    int lastCharDown = getLayout().getLineVisibleEnd(0) ;
    if (charSequence.length() > lastCharDown){
        SpannableStringBuilder spannableStringBuilder = new SpannableStringBuilder() ;
        spannableStringBuilder.append(charSequence.subSequence(0,lastCharDown-4)).append("...") ;
        setText(spannableStringBuilder);
    }
    super.onDraw(canvas);
}


这样就可以了,


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值