这个是什么组件啊?是TextView,不会吧?TextView能显示图片吗?肯定能呀。





主要是用到了SpannableString,ForegroundColorSpan,ImageSpan这3个类.


Java代码
String origtext = data.getString("origtext");
SpannableString spannable = new SpannableString(origtext);

spannable = TextUtil.decorateFaceInStr(spannable, RegexUtil.getStartAndEndIndex(origtext, Pattern.compile("\\/[\u4e00-\u9fa5a-zA-Z]{1,3}")), getResources());//解析成本地表情
spannable = TextUtil.decorateRefersInStr(spannable, RegexUtil.getStartAndEndIndex(origtext, Pattern.compile("@.*:")), getResources());//高亮显示微薄转发,回复者昵称


String origtext = data.getString("origtext");
SpannableString spannable = new SpannableString(origtext);

spannable = TextUtil.decorateFaceInStr(spannable, RegexUtil.getStartAndEndIndex(origtext, Pattern.compile("\\/[\u4e00-\u9fa5a-zA-Z]{1,3}")), getResources());//解析成本地表情
spannable = TextUtil.decorateRefersInStr(spannable, RegexUtil.getStartAndEndIndex(origtext, Pattern.compile("@.*:")), getResources());//高亮显示微薄转发,回复者昵称


Java代码
public static List<Map<String,Object>> getStartAndEndIndex(String sourceStr,Pattern pattern){
List<Map<String,Object>> list = new ArrayList<Map<String,Object>>();
Matcher matcher = pattern.matcher(sourceStr);
boolean isFind = matcher.find();
while (isFind) {
Map<String,Object> map = new HashMap<String, Object>();
String faceName = matcher.group().substring(1,matcher.group().length());//表情名称
map.put("startIndex",matcher.start());
map.put("endIndex",matcher.end());
map.put("faceName",faceName);
list.add(map);
isFind = matcher.find((Integer)map.get("endIndex")-1);
}
return list;
}


public static List<Map<String,Object>> getStartAndEndIndex(String sourceStr,Pattern pattern){
List<Map<String,Object>> list = new ArrayList<Map<String,Object>>();
Matcher matcher = pattern.matcher(sourceStr);
boolean isFind = matcher.find();
while (isFind) {
Map<String,Object> map = new HashMap<String, Object>();
String faceName = matcher.group().substring(1,matcher.group().length());//表情名称
map.put("startIndex",matcher.start());
map.put("endIndex",matcher.end());
map.put("faceName",faceName);
list.add(map);
isFind = matcher.find((Integer)map.get("endIndex")-1);
}
return list;
}
Java代码
public static SpannableString decorateVipInStr(SpannableString spannable,List<Map<String,Object>> list,Resources resources){
int size = list.size();
Drawable drawable = null;
if(list!=null&&list.size()>0){
for(int i=0;i<size;i++){
Map<String,Object> map = list.get(i);
drawable = resources.getDrawable(R.drawable.vip);
drawable.setBounds(0, 0, drawable.getIntrinsicWidth(),drawable.getIntrinsicHeight());
ImageSpan span = new ImageSpan(drawable,ImageSpan.ALIGN_BASELINE);
spannable.setSpan(span, (Integer)map.get("startIndex"), (Integer)map.get("endIndex"), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}
}
return spannable;
}

public static SpannableString decorateTopicInStr(SpannableString spannable,List<Map<String,Object>> list,Resources resources){
int size = list.size();
Drawable drawable = null;
CharacterStyle foregroundColorSpan=new ForegroundColorSpan(Color.argb(255, 33, 92, 110));
if(list!=null&&list.size()>0){
for(int i=0;i<size;i++){
Map<String,Object> map = list.get(i);
spannable.setSpan(foregroundColorSpan, (Integer)map.get("startIndex"), (Integer)map.get("endIndex"), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}
}
return spannable;
}

更多相关文章

  1. Eclipse下Android编程代码自动提示
  2. Android(安卓)RecyclerView +SnapHelper 实现横向滚动自动滚动到
  3. Android与H5交互,向H5注入APP账号密码免登录等。
  4. Android编程15个很有用的代码片段
  5. Android快速开发工具:AndroidAnnotations:
  6. Android(安卓)动画之集合动画AnimatorSet
  7. Android实现水波纹扩散效果的实例代码
  8. 解决 Android(安卓)N 上报错:android.os.FileUriExposedException
  9. Android中调用Paint的measureText()方法取得字符串显示的宽度值

随机推荐

  1. Android Build系统分析
  2. GetSystemService的详解
  3. 简单的 Android 系统主要版本对比图表
  4. Android 照相机触摸浮层之探索
  5. Android一些实用的函数
  6. Android 笔记(个人总结)
  7. android中颜色的定义
  8. Android实现长截屏功能
  9. Android(安卓)列表视图
  10. Android 混淆代码学习以及Android加密工