EditText:

通常用于显示文字,但有时候也需要在文字中夹杂一些图片,比如QQ中就可以使用表情图片,又比如需要的文字高亮显示等等,如何在android中也做到这样呢? 
记得android中有个android.text包,这里提供了对文本的强大的处理功能。 
添加图片主要用SpannableString和ImageSpan类:

     Drawable drawable = getResources().getDrawable(id);  drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());  //需要处理的文本,[smile]是需要被替代的文本  SpannableString spannable = new SpannableString(getText().toString()+"[smile]");  //要让图片替代指定的文字就要用ImageSpan  ImageSpan span = new ImageSpan(drawable, ImageSpan.ALIGN_BASELINE);  //开始替换,注意第2和第3个参数表示从哪里开始替换到哪里替换结束(start和end)  //最后一个参数类似数学中的集合,[5,12)表示从5到12,包括5但不包括12  spannable.setSpan(span, getText().length(),getText().length()+"[smile]".length(), Spannable.SPAN_INCLUSIVE_EXCLUSIVE);    setText(spannable);

将需要的文字高亮显示: 

 

public void highlight(int start,int end){  SpannableStringBuilder spannable=new SpannableStringBuilder(getText().toString());//用于可变字符串  ForegroundColorSpan span=new ForegroundColorSpan(Color.RED);  spannable.setSpan(span, start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);  setText(spannable);  }

 

加下划线: 

 

public void underline(int start,int end){  SpannableStringBuilder spannable=new SpannableStringBuilder(getText().toString());  CharacterStyle span=new UnderlineSpan();  spannable.setSpan(span, start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);  setText(spannable);  }

 

组合运用:

 

SpannableStringBuilder spannable=new SpannableStringBuilder(getText().toString());  CharacterStyle span_1=new StyleSpan(android.graphics.Typeface.ITALIC);  CharacterStyle span_2=new ForegroundColorSpan(Color.RED);  spannable.setSpan(span_1, start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);  spannable.setSpan(span_2, start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);  setText(spannable);

 

案例:带有\n换行符的字符串都可以用此方法显示2种颜色

 

    /** * 带有\n换行符的字符串都可以用此方法显示2种颜色 * @param text * @param color1 * @param color2 * @return */  public SpannableStringBuilder highlight(String text,int color1,int color2,int fontSize){  SpannableStringBuilder spannable=new SpannableStringBuilder(text);//用于可变字符串  CharacterStyle span_0=null,span_1=null,span_2;  int end=text.indexOf("\n");  if(end==-1){//如果没有换行符就使用第一种颜色显示  span_0=new ForegroundColorSpan(color1);  spannable.setSpan(span_0, 0, text.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);  }else{  span_0=new ForegroundColorSpan(color1);  span_1=new ForegroundColorSpan(color2);  spannable.setSpan(span_0, 0, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);  spannable.setSpan(span_1, end+1, text.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);  span_2=new AbsoluteSizeSpan(fontSize);//字体大小  spannable.setSpan(span_2, end+1, text.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);  }  return spannable;  }  

以上实际都是Html.fromHtml(html)的代码实现形式。

=============================================================================

TextView: (方法与EditView类似)

如何让一个TextView中的关键字高亮显示? 

/**
* 关键字高亮显示
* @paramtarget 需要高亮的关键字
*/
publicvoidhighlight(String target){
String temp=getText().toString();
SpannableStringBuilder spannable =newSpannableStringBuilder(temp);
CharacterStyle span=null;

Pattern p =Pattern.compile(target);
Matcher m =p.matcher(temp);
while(m.find()) {
span =newForegroundColorSpan(Color.RED);//需要重复!

//span = new ImageSpan(drawable,ImageSpan.XX);//设置现在图片
spannable.setSpan(span, m.start(), m.end(),Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}
setText(spannable);
}

文章转载,版权归原作者所有,尊重版权,支持原创

转载于:https://www.cnblogs.com/rayray/p/3408141.html

【Android】spannableStringBuilder相关推荐

  1. 【Android】Parse开发笔记(1)—— 准备

    一.简介 Parse是由 YC 孵化出来的.专为移动应用提供后台服务的云计算平台,为开发者包办繁琐的后台服务,让开发者只需专注于具体的开发工作.它提供任意数据保存.照片或其它文件存储.发送推送通知.创 ...

  2. 【Android】显示Emoji表情字符

    一.下载AndroidEmoji.ttf字体 地址1:Github Android Platform 地址2:AndroidEmoji.ttf.zip 二.使用 2.1 将字体拷贝到assets/fo ...

  3. 【Android】Eclipse自动编译NDK/JNI的三种方法

    [Android]Eclipse自动编译NDK/JNI的三种方法 SkySeraph Sep. 18th  2014 Email:skyseraph00@163.com 更多精彩请直接访问SkySer ...

  4. android编程中添加gif,Android应用开发之【Android】使用android-gif-drawable包加载GIF动图...

    本文将带你了解Android应用开发之[Android]使用android-gif-drawable包加载GIF动图,希望本文对大家学Android有所帮助. [导包] 首先需要导入android-g ...

  5. 【Android】保存Fragment切换状态

    [Android]保存Fragment切换状态 前言 一般频繁切换Fragment会导致频繁的释放和创建,如果Fragment比较臃肿体验就非常不好了,这里分享一个方法. 声明 欢迎转载,但请保留文章 ...

  6. 【Android】3.0 第3章 百度地图及其应用--预备知识

    分类:C#.Android.VS2015.百度地图应用: 创建日期:2016-02-04 一.概述 这一章先来点有意思的百度地图应用示例,然后再分章详细介绍用C#开发Android App的各种基本技 ...

  7. 【Android】Vitamio 4.0 公测版发布(2013-05-28)

    更新 Vitamio 4.0 正式版已经发布! 这里:[Android]Vitamio 4.0 正式版发布/ Vitamio IOS 测试版发布(2013-07-16) 正文 一.下载地址 Vitam ...

  8. 【Android】Activity和PopupWindow都实现从底部弹出或滑出选择菜单或窗口

    使用Activity和PopupWindow都实现从底部弹出或滑出选择菜单或窗口 [Android]测试与popwindow PopupWindow转载自:Android PopupWindow实现从 ...

  9. 【Android】对话框 AlertDialog

    [Android]对话框 AlertDialog 本讲介绍一下Android基本组件:对话框AlertDialog. 来源:http://blog.csdn.net/feng88724/article ...

最新文章

  1. Python 工程管理及 virtualenv 的迁移
  2. 如何网络推广教你如何网站排名“更上一层楼”?
  3. Ubuntu 14.04 台式机锐捷使用:
  4. RabbitMQ 一二事 - 简单队列使用
  5. yum 下载软件的存放位置
  6. [译]ABP vNext介绍
  7. python pandas serie简介及基本使用
  8. 程序员面试金典 - 面试题 05.03. 翻转数位(位运算)
  9. 响应式手机配件织梦模板
  10. Oracle之唯一性约束(UNIQUEConstraint)用法详解
  11. 树变二叉树结点数计算
  12. 嵌入式C语言编程中经验教训总结(一) 详解const、static和volatile
  13. 【MySql】mysql之用户管理
  14. Android移动开发基础
  15. 常用IP地址端口对照表
  16. 他的成功不可复制——听洪小文讲座有感
  17. DHCP option43配置方法
  18. 最新B端产品经理面试问题大全及答案合集(151题全部有答案)【11年大厂面试官呕心制作】
  19. Golang教程:(十一)数组和切片
  20. 25岁,毕业一年辞职自学转行嵌入式是否可行?

热门文章

  1. Linux下软件安装和删除的命令
  2. DOM节点的属性及文本操作
  3. react-native---配置reactnative报红,run-Android时候报错unable to load script from assets 'index.android.bundl
  4. 计算机网络学习笔记(15. OSI参考模型③、TCP/IP参考模型)
  5. router vue 回到顶部_小猿圈HTML5学习之基于iview的router常用控制方式
  6. 美团信用卡现金分期怎么还?
  7. 理财非保本浮动收益型什么意思?
  8. 当自己购买的基金已经超过自己的心里的收益后会选择继续还是退出?
  9. 下岗职工能不能提前退休?怎样才能提前退休?
  10. 借条已经收回,他以没收据为由让我继续还款怎样办?