将类似“¥1.5元”的文本中数字标红
16lz
2021-01-26
效果:
/** 将类似"¥ 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
分割线======================================================================================
完整代码:
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
调用方法,从后台拿到返回的数据:
msg=mData.get(mIndex);if(msg instanceof HotNews) msg=((HotNews)msg).getContent();vNews.setText(msg instanceof CharSequence? (CharSequence)msg: Objects.toString(msg, null));
分割线======================================================
TextView中设置某段字体颜色:
tv_title.setText("支付界MCC查询"); tv_title.setTypeface(Typeface.createFromAsset(getContext().getAssets(), "fonts/black_simplified.TTF")); SpannableStringBuilder builder = new SpannableStringBuilder(tv_title.getText().toString()); //ForegroundColorSpan 为文字前景色,BackgroundColorSpan为文字背景色 ForegroundColorSpan redSpan = new ForegroundColorSpan(Color.parseColor("#FF9900")); builder.setSpan(redSpan, 3, 6, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);//把下标3~6的字符设置为橙色 tv_title.setText(builder);
效果图:
tv_title.setTypeface(Typeface.createFromAsset(getContext().getAssets(), "fonts/black_simplified.TTF"));这里是设置自定义的字体,只要把自定义字体的ttf文件放在assets下就可以了:
更多相关文章
- Android(安卓)Studio 3.3.X 导入项目的正确姿势
- 2015最火十大Android开源项目,是个程序员你就该看看!《IT蓝豹》
- Android项目集成ReactNative及遇到问题
- Android(安卓)设置TextView字体颜色
- 开始启程,你的第一行
- Android(安卓)Studio设置
- 单例模式在android中的应用
- android项目解刨之时间轴
- 【开源项目12】Retrofit – Java(Android) 的REST 接口封装类库