[Android]TextUtils.ellipsize()截取指定长度字符串(附图文混排)
2013-04-09 17:29
429 查看
参考:http://zilla.blog.51cto.com/3095640/984775
效果图:
实现代码:
效果图:
实现代码:
// 监听布局变化,直接获取显示的长度 txtDescription.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() { @Override public void onGlobalLayout() { if(availableTextWidth == 0&&txtDescription.getWidth()>0){ TextPaint paint = txtDescription.getPaint(); int paddingLeft = txtDescription.getPaddingLeft(); int paddingRight= txtDescription.getPaddingRight(); int bufferWidth =(int) paint.getTextSize()*3;//缓冲区长度,空出两个字符的长度来给最后的省略号及图片 // 计算出2行文字所能显示的长度 availableTextWidth = (txtDescription.getWidth() - paddingLeft - paddingRight) * LINE_COUNT- bufferWidth; // 根据长度截取出剪裁后的文字 String ellipsizeStr = (String) TextUtils.ellipsize(DESCRIPTION, (TextPaint) paint, availableTextWidth, TextUtils.TruncateAt.END); String imgTag = "img"; int start = ellipsizeStr.length(); int end = start + imgTag.length(); SpannableStringBuilder ssBuilder = new SpannableStringBuilder(ellipsizeStr+imgTag); // 插入图片 Drawable drawable = getResources().getDrawable(R.drawable.video); drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight()); ImageSpan imgSpan = new ImageSpan(drawable,ImageSpan.ALIGN_BASELINE); ssBuilder.setSpan(imgSpan, start, end, SpannableStringBuilder.SPAN_EXCLUSIVE_EXCLUSIVE); txtDescription.setText(ssBuilder); if(Build.VERSION.SDK_INT>=16){ txtDescription.getViewTreeObserver().removeOnGlobalLayoutListener(this); }else{ txtDescription.getViewTreeObserver().removeGlobalOnLayoutListener(this); } } } });
相关文章推荐
- 使用overflow代替left截取指定长度字符串
- 字符串截取指定长度字节数(Java方法实例,注:同样思路js也适用)
- c#的中英文混合字符串截取指定长度,startidx从0开始
- asp.net 安全的截取指定长度的html或者ubb字符串
- asp.net在前台将指定字符串按指定长度进行截取并用其他字符串替换方法
- jQuery截取指定长度字符串的实现原理及代码
- android TextView 使用SpannableString数据源时,TextView的ellipsize失效
- 在C#中截取指定长度的中文字符串.
- Oracle截取字符串去掉字段末尾指定长度的字符
- 不区分汉字还是英文和数字,按指定字节长度截取字符串
- Android之TextView的ellipsize属性
- C#截取指定长度中英文字符串方法
- 用C#截取指定长度的中英文混合字符串
- sql中从指定位置截取指定长度字符串
- Android基于TextView属性android:ellipsize实现跑马灯效果的方法
- [1]字符串按中文符占3位进行指定长度剪切[2]Double类型截取指定长度(指定长度=整数位+小数位)
- C#截取指定长度中英文字符串方法
- NSString:创建,长度,取字符,是否以某字符串开头,结尾, 查找指定字符串的范围,截取,拼接,替换,比较,替换,数值转换,大小写转换
- freemarker截取指定长度字符串
- TextView-android:ellipsize 属性