將類似“¥1.5元”的文本中數字標紅

效果:

 

/** 將類似"¥ 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));

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章