内容也就和标题一样,通过SpinnerString设置文字的属性,如下面:
//spinnableString就是修改文本的属性 // SpannableString spannableString = new SpannableString(str); ForegroundColorSpan span = new ForegroundColorSpan(Color.BLUE); //设置颜色 spannableString.setSpan(span, Integer.parseInt(map.get(START)), Integer.parseInt(map.get(END)), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);//具体百度还要设置texteview的属性:textView.setText(spannableString);
之后通过正则表达式,从字段中获取想要的字段:
public List<HashMap<String, String>> getStartAndEnd(Pattern pattern) { List<HashMap<String, String>> lst = new ArrayList<HashMap<String,String>>(); Matcher matcher = pattern.matcher(str); //用正则表达式匹配在文本中是否有查找的字段,如果有就讲其存储在list中 while(matcher.find()) { HashMap<String, String> map = new HashMap<String, String>(); // map.put(PHRASE, matcher.group()); map.put(START, matcher.start()+""); // start函数返回匹配到的子字符串的开始位置,没有匹配到的话,应该是-1,小于0 map.put(END, matcher.end()+""); lst.add(map); } return lst; }
之后就是输入需要的字段:
hightLight(Pattern.compile(TOPIC)); hightLight(Pattern.compile(NAME)); hightLight(Pattern.compile(URL));
private static final String TOPIC="#.+?#"; private static final String NAME="@([\u4e00-\u9fa5A-Za-z0-9_]*)"; private static final String URL="http://.*";
private String str="#《爱够了没》第二季开播了# 麻辣的话题看够没?[爱你][花心][抓狂]强大的美女观察团看够了没?@陈汉典 回归,@HOLD住姊LINLIN 爆笑加盟,《#爱够了没#》第二季播出了!五位帅哥一一登台亮相,Hold住姐现场征婚,不知道Hold住
下面为整个源代码:
package app.coolweather.com.weibo; import android.app.Activity; import android.app.ProgressDialog; import android.graphics.Color; import android.os.Bundle; import android.text.Spannable; import android.text.SpannableString; import android.text.style.ForegroundColorSpan; import android.widget.TextView; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * Created by Administrator on 2016/8/27. */ public class AtActivity extends Activity { private ProgressDialog progressDialog; private TextView textView; private static String START="start"; private static String END="end"; private String str="#《爱够了没》第二季开播了# 麻辣的话题看够没?[爱你][花心][抓狂]强大的美女观察团看够了没?@陈汉典 回归,@HOLD住姊LINLIN 爆笑加盟,《#爱够了没#》第二季播出了!五位帅哥一一登台亮相,Hold住姐现场征婚,不知道Hold住姐青睐哪一个呢? http://t.cn/ShSRRN "; private static final String TOPIC="#.+?#"; private static final String NAME="@([\u4e00-\u9fa5A-Za-z0-9_]*)"; private static final String URL="http://.*"; private SpannableString spannableString = new SpannableString(str); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.at_layout); showDialg(); progressDialog.dismiss(); textView=(TextView)findViewById(R.id.at_text_view); hightLight(Pattern.compile(TOPIC)); hightLight(Pattern.compile(NAME)); hightLight(Pattern.compile(URL)); //设置spannableString textView.setText(spannableString); } /** * 对查找到的文字进行调高调亮 * @param pattern */ public void hightLight(Pattern pattern) { List<HashMap<String, String>> lst = this.getStartAndEnd(pattern); //获取查找到的文字字段 for (HashMap<String, String> map : lst) //遍历里面得文字,改变其的属性 { //spinnableString就是修改文本的属性 // SpannableString spannableString = new SpannableString(str); ForegroundColorSpan span = new ForegroundColorSpan(Color.BLUE); //设置颜色 spannableString.setSpan(span, Integer.parseInt(map.get(START)), Integer.parseInt(map.get(END)), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);//具体百度 } } /** * 用正则表达式匹配字段是否含有需要的文字,有的话就放入list中 * @param pattern * @return */ public List<HashMap<String, String>> getStartAndEnd(Pattern pattern) { List<HashMap<String, String>> lst = new ArrayList<HashMap<String,String>>(); Matcher matcher = pattern.matcher(str); //用正则表达式匹配在文本中是否有查找的字段,如果有就讲其存储在list中 while(matcher.find()) { HashMap<String, String> map = new HashMap<String, String>(); // map.put(PHRASE, matcher.group()); map.put(START, matcher.start()+""); // start函数返回匹配到的子字符串的开始位置,没有匹配到的话,应该是-1,小于0 map.put(END, matcher.end()+""); lst.add(map); } return lst; }
效果图: