效果:
/** 將類似"¥ 1.5 元"的文本中的數字標紅 或標藍 或標綠*/
public CharSequence getContent(){
String input=text;
if(input==null || input.isEmpty()) content="";
else if(content==null){
//"¥ *-?\\d+(\\.\\d+)? *元" 你想要標紅的文本部分
if(pattern==null) pattern=Pattern.compile("¥ *-?\\d+(\\.\\d+)? *元");
Matcher m=pattern.matcher(input);
SpannableStringBuilder builder=null;
int start=0;
int end=0;
while(m.find()){
if(builder==null) builder=new SpannableStringBuilder();
end=m.start();
if(end>start){
builder.append(input.substring(start, end));
start=builder.length();
}
String g=m.group();
builder.append(g.substring(1, g.length()-1).trim()).append("元");
/**
紅色 #e10130 修改這個顏色值選擇你想要的顏色
藍色 #0083E5 我的項目設置的是藍色
*/
builder.setSpan(new ForegroundColorSpan(Color.parseColor("#e10130")),
start, builder.length(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
start=m.end();
}
if(builder==null) content=input;
else{
if(start<input.length()) builder.append(input.substring(start));
content=builder;
}
}
return content;
}
分割線======================================================================================
完整代碼:
model類 HotNews:
public class HotNews
{
@SerializedName("text")
public String text;
@SerializedName("add_time")
public String addTime;
@SerializedName("id")
public int id;
@SerializedName("link")
public String link;
private CharSequence content;
static Pattern pattern;
/** 將類似"¥ 1.5 元"的文本中的數字標紅 或標藍 或標綠*/
public CharSequence getContent(){
String input=text;
if(input==null || input.isEmpty()) content="";
else if(content==null){
if(pattern==null) pattern=Pattern.compile("¥ *-?\\d+(\\.\\d+)? *元");
Matcher m=pattern.matcher(input);
SpannableStringBuilder builder=null;
int start=0;
int end=0;
while(m.find()){
if(builder==null) builder=new SpannableStringBuilder();
end=m.start();
if(end>start){
builder.append(input.substring(start, end));
start=builder.length();
}
String g=m.group();
builder.append(g.substring(1, g.length()-1).trim()).append("元");
//我這邊是一套代碼多個項目 t2代表項目1 t4代表項目2 類似這樣 根據項目的主體顏色選擇對應的文字顏色
if(BuildConfig.FLAVOR_TYPE.equals("t2")||BuildConfig.FLAVOR_TYPE.equals("t4")){
/**
藍色
*/
builder.setSpan(new ForegroundColorSpan(Color.parseColor("#0083E5")),
start, builder.length(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
}
else if(BuildConfig.FLAVOR_TYPE.equals("t7")){
/**
綠色
*/
builder.setSpan(new ForegroundColorSpan(Color.parseColor("#1b9b3e")),
start, builder.length(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
}else {
/**
紅色
*/
builder.setSpan(new ForegroundColorSpan(Color.parseColor("#e10130")),
start, builder.length(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
}
start=m.end();
}
if(builder==null) content=input;
else{
if(start<input.length()) builder.append(input.substring(start));
content=builder;
}
}
return content;
}
}
調用方法,從後臺拿到返回的數據:
msg=mData.get(mIndex);
if(msg instanceof HotNews) msg=((HotNews)msg).getContent();
vNews.setText(msg instanceof CharSequence? (CharSequence)msg: Objects.toString(msg, null));