900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > Android之如何设置TextView中不同字段的字体颜色

Android之如何设置TextView中不同字段的字体颜色

时间:2022-10-08 05:50:02

相关推荐

Android之如何设置TextView中不同字段的字体颜色

在这里先看看效果图:

OK,有时候,在我们的项目中会要求TextView中文本有一部分的字体颜色不一样,这时我们应该使用

SpannableStringBuilder这个工具类,当然这个类的功能很强大,这里我只是实现上面的样式,其它的不做介绍,

SpannableStringBuilder的实现接口是Spannable这个接口,而Spannable最终都实现了CharSequence,因此我们直

接可以通过TextView.setText()来进行设置。

下面给出实现代码:

public class StringFormatUtil {private SpannableStringBuilder spBuilder;private String wholeStr, highlightStr;private Context mContext;private int color;private int start = 0, end = 0;/*** * @param context* @param wholeStr 全部文字* @param highlightStr 改变颜色的文字* @param color 颜色*/public StringFormatUtil(Context context,String wholeStr,String highlightStr,int color){this.mContext=context;this.wholeStr=wholeStr;this.highlightStr=highlightStr;this.color=color;}public StringFormatUtil fillColor(){if(!TextUtils.isEmpty(wholeStr)&&!TextUtils.isEmpty(highlightStr)){if(wholeStr.contains(highlightStr)){/** 返回highlightStr字符串wholeStr字符串中第一次出现处的索引。*/start=wholeStr.indexOf(highlightStr);end=start+highlightStr.length();}else{return null;}}else{return null;}spBuilder=new SpannableStringBuilder(wholeStr);color=mContext.getResources().getColor(color);CharacterStyle charaStyle=new ForegroundColorSpan(color);spBuilder.setSpan(charaStyle, start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);return this;}public SpannableStringBuilder getResult(){if (spBuilder != null) {return spBuilder;}return null;}}

当然上面的第一步是获取你要改变颜色的文字的起始位置到结束位置,接着通过SpannableStringBuilder来改变文字

的颜色。

public class MainActivity extends Activity {private TextView tv_show;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initView();}private void initView() {tv_show = (TextView) findViewById(R.id.tv_show);String wholeStr = "想要改变后面的颜色这是要改变的颜色";StringFormatUtil spanStr = new StringFormatUtil(this, wholeStr,"这是要改变的颜色", R.color.blue).fillColor();tv_show.setText(spanStr.getResult());}}

转载请注明出处:/hai_qing_xu_kong/article/details/44225955情绪控_

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。