android中文字高亮设置案例
在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;
}
}
这里是原工程高亮工程
下一篇接受如何通过代码展示不同的表情图像
最新文章
- 7.Struts2复杂类型数据的接受
- 2015-SH项目总结
- collection中的retainAll()方法
- Silverlight项目笔记6:Linq求差集、交集&;检查网络连接状态&;重载构造函数复用窗口
- T-SQL Apply的用法
- iOS - OC Block 代码块
- linux小包集合
- SqlServer日志
- Solr4.8.0源码分析(6)之非排序查询
- UITabBarController 笔记(三) UITabBarController 配合 UINavigationController 的使用
- linq中的cast<;T>;()及OfType<;T>;()
- SDWEBImage和collectionView的组合,以及collectionView的随意间距设置
- WEB中调用Nutch执行JOB抓取
- 结队编程--基于GUI的四则运算
- Apple 公司开发者账号添加团队成员
- 机器学习基石:07 The VC Dimension
- ASP.NET Web API决跨域问题
- Git-git push -u为何第二次不用指定-u?
- POI搜索简介
- c++const关键字---15
热门文章
- English - when用法
- iOS手机号正则表达式并实现344格式 (正则的另一种实现方式)
- Asp.Net MVC 控制器
- class A<;T>; where T:class 这个泛型类中的Where T:class什么意思
- openwrt看IP流量
- 【转】CentOS 使用yum命令安装出现错误提示&rdquo;could not retrieve mirrorlist http://mirrorlist.centos.org ***&rdquo;
- JConsole是什么
- oracle查询字符集语句
- 用auto_ptr类模板帮助动态内存管理
- 《windows程序设计》学习_3.1:画出雷区,左键的使用