在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> lists = getStartAndEnd(Pattern.compile(pattern));
for(Map 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> getStartAndEnd(Pattern pattern){
ArrayList> lists = new ArrayList>(0);

Matcher matcher = pattern.matcher(str);
while(matcher.find()){
Map map = new HashMap(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. android 自动化测试工具 Monkey
  2. Andriod自动化测试原理基础
  3. Android JSON解析示例代码
  4. 命令行下创建 Android 工程,用 Ant 进行编译部署
  5. android基础知识12:android自动化测试04—Robotium:实例(上)
  6. 【Android】Android Studio 1.5+ 中混合调试Native和Java代码

随机推荐

  1. Android5.X之百分比布局库(percent-suppo
  2. 解决WebView里面,焦点到编辑框上,网页字体
  3. php本地环境搭建和变量类型
  4. SQLite与ContentProvider)
  5. android studio 自定义路径安装报错"You
  6. MVP和MVC的区别
  7. android设置窗口全屏
  8. android 关于paint的设置
  9. Android(安卓)Volley框架详解
  10. Android(安卓)输入法键盘遮挡控件问题的