在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(安卓)Kotlin开发之Hello World
  2. Android(安卓)JSON解析示例代码
  3. Android:退出程序后保持Serivce开启不关闭
  4. 【Android】Android中不同手机分辨率适配问题
  5. Android中应用界面主题Theme使用方法和页面定时跳转应用
  6. Android:设置圆形头像,Android截取圆形图片
  7. 【安卓学习笔记】Android(安卓)Studio第9课——进度条ProgressBa
  8. Android(安卓)ListView 滑动背景为黑色的解决办法[转]
  9. Mac 下设置android NDK的环境

随机推荐

  1. android 4.2 rtlSupport对UI性能的坑
  2. Android中使用"running services"查看ser
  3. Android和H5交互
  4. Android(安卓)回调机制举例及个人理解
  5. Android(安卓)Data Binding ——入门
  6. ArcGIS for Android(安卓)在Eclipse上的
  7. AndroidView绘制流程一(View添加流程)
  8. Android(安卓)SystemClock 应用
  9. 标签TextView
  10. gradle添加新的代码仓库