在android中我们有时候需要对一些标示性的文字进行高亮【用不同的颜色显示】,例如微博中的@**等等。。。这些特效是通过SpannableString这个类来实现的

思路是将要显示的string进行一次封装str = "#jone# 我的小小测试关于微博中的高亮呵呵呵#jone# 大家都来看看啊@王璇   http://www.jone.cn";spannableString = new SpannableString(str);,然后通过设置SpannableString的setSpan来设置不同的显示效果直接上代码:

package com.example.actiser;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import android.os.Bundle;
import android.os.Handler;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Color;
import android.graphics.drawable.Drawable;
import android.text.Spannable;
import android.text.SpannableString;
import android.text.style.ForegroundColorSpan;
import android.text.style.ImageSpan;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity {

public TextView txt;
final String START = "start";
final String END = "end";
String str ="";
final String TOPIC = "#.+?#";
final String NAMEH = "@([\u4e00-\u9fa5A-Za-z0-9_]*)";
final String URLH = "http://.*";
SpannableString spannableString;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
txt = (TextView) findViewById(R.id.tv);
str = "#jone# 我的小小测试关于微博中的高亮呵呵呵#jone# 大家都来看看啊@王璇   http://www.jone.cn";
spannableString = new SpannableString(str);
heightLight(TOPIC,Color.BLUE);
heightLight(NAMEH,Color.RED);
heightLight(URLH,Color.GREEN);
   
   txt.setText(spannableString);
}

private void heightLight(String pattern,int color){
ArrayList<Map<String,String>> lists = getStartAndEnd(Pattern.compile(pattern));
for(Map<String,String> str:lists){
ForegroundColorSpan span = new ForegroundColorSpan(color);
spannableString.setSpan(span,Integer.parseInt(str.get(START)), Integer.parseInt(str.get(END)), Spannable.SPAN_EXCLUSIVE_INCLUSIVE);
}
}
private ArrayList<Map<String,String>> getStartAndEnd(Pattern pattern){
ArrayList<Map<String,String>> lists = new ArrayList<Map<String,String>>(0);

Matcher matcher = pattern.matcher(str);
while(matcher.find()){
Map<String,String> map = new HashMap<String, String>(0);
map.put(START, matcher.start()+"");
map.put(END, matcher.end()+"");
lists.add(map);
}
return lists;
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}

}

这里是原工程高亮工程

下一篇接受如何通过代码展示不同的表情图像

最新文章

  1. 7.Struts2复杂类型数据的接受
  2. 2015-SH项目总结
  3. collection中的retainAll()方法
  4. Silverlight项目笔记6:Linq求差集、交集&amp;检查网络连接状态&amp;重载构造函数复用窗口
  5. T-SQL Apply的用法
  6. iOS - OC Block 代码块
  7. linux小包集合
  8. SqlServer日志
  9. Solr4.8.0源码分析(6)之非排序查询
  10. UITabBarController 笔记(三) UITabBarController 配合 UINavigationController 的使用
  11. linq中的cast&lt;T&gt;()及OfType&lt;T&gt;()
  12. SDWEBImage和collectionView的组合,以及collectionView的随意间距设置
  13. WEB中调用Nutch执行JOB抓取
  14. 结队编程--基于GUI的四则运算
  15. Apple 公司开发者账号添加团队成员
  16. 机器学习基石:07 The VC Dimension
  17. ASP.NET Web API决跨域问题
  18. Git-git push -u为何第二次不用指定-u?
  19. POI搜索简介
  20. c++const关键字---15

热门文章

  1. English - when用法
  2. iOS手机号正则表达式并实现344格式 (正则的另一种实现方式)
  3. Asp.Net MVC 控制器
  4. class A&lt;T&gt; where T:class 这个泛型类中的Where T:class什么意思
  5. openwrt看IP流量
  6. 【转】CentOS 使用yum命令安装出现错误提示&rdquo;could not retrieve mirrorlist http://mirrorlist.centos.org ***&rdquo;
  7. JConsole是什么
  8. oracle查询字符集语句
  9. 用auto_ptr类模板帮助动态内存管理
  10. 《windows程序设计》学习_3.1:画出雷区,左键的使用