Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 486|回复: 0

开发交流:EditText:高亮的关键字

[复制链接]

该用户从未签到

发表于 2011-10-24 10:21:33 | 显示全部楼层 |阅读模式
  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);

  }
回复

使用道具 举报

该用户从未签到

发表于 2011-10-24 10:21:35 | 显示全部楼层

Re:开发交

楼主太nb了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

GMT+8, 2025-1-11 02:36 , Processed in 0.363291 second(s), 33 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表