android ---spannableStringBuilder

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中的关键字高亮显示?

复制代码
                                                                                                                                                                         /**                                                           * 关键字高亮显示 *                                                           @param                                                           target 需要高亮的关键字                                                           */                                                                                                                     public                                                                                                                     void                                                           highlight(String target){ String temp                                                          =                                                          getText().toString(); SpannableStringBuilder spannable                                                           =                                                                                                                     new                                                           SpannableStringBuilder(temp); CharacterStyle span                                                          =                                                          null                                                          ; Pattern p                                                           =                                                           Pattern.compile(target); Matcher m                                                           =                                                           p.matcher(temp);                                                           while                                                           (m.find()) { span                                                           =                                                                                                                     new                                                           ForegroundColorSpan(Color.RED);                                                          //                                                          需要重复!                                                                                                                                                                   //span = new ImageSpan(drawable,ImageSpan.XX);//设置现在图片                                                                                                                      spannable.setSpan(span, m.start(), m.end(),Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); } setText(spannable); }                                                     
复制代码

更多相关文章

  1. Android实现获取本机中所有图片
  2. Android中实现网络图片的获取
  3. AsyncTask异步下载图片
  4. Android图片加载框架Picasso最全使用教程 一
  5. android checkbox 未选中状态 已选中状态 替换成自己的图片
  6. android 跑马灯 文字一行能显示全也能跑马灯
  7. Android 控件之Gallery和ImageSwitcher图片切换器

随机推荐

  1. JDBC原理分析(包括基本的使用方式和面试题
  2. Spring Ioc 实例化 Bean 对象有几种方式?
  3. Springboot实现定时任务
  4. 纳税服务系统总结
  5. array must be initialized with a brace
  6. 冒泡排序就这么简单
  7. Springboot实现文件上传下载
  8. 每日学习-ansible firewalld模块
  9. 整理了一套Servlet面试题
  10. 选择排序就这么简单