写给自己的话:如果只是为了解决眼前的问题去百度去google而应急这本身没错,但是如果只是救了急而不去消化掉,那永远也不可能进步,多勤于总结消化吸收才能更快的进步.
最近在做一个商城类项目,注册时需要弹出一些信息,但是内容又是不一样的颜色,大小,刚开始是打算使用Html标签来写,通过TextView.setText(Html.fromHtml("内容"))来写的,但是由于标签学的很烂,这么简单的标签都没写出来,偶然的关系看到关注的郭大神的公众号推送了SpannableStringBuilder这个类,当然同时也了解到了SpannableString这个类,可谓收益匪浅呀,下面就来展示一下实现的效果,这里只看核心的功能,由于只是一个介绍核心功能的小demo,所以布局代码尽量做到简单,以便一看就懂.需要其它的可以再加入:
1:首先上布局,这里是一个TextView,当然EditText也是可以的,可以试一下:
<TextView
android:gravity="center"
android:id="@+id/tv"
android:layout_width="200dp"
android:layout_height="200dp" />
TextView textView = (TextView) findViewById(R.id.tv);
SpannableStringBuilder spannableStringBuilder = new SpannableStringBuilder();
spannableStringBuilder.append("提示\n请确认上家邀请码是:1\n请确认上家昵称是:田田");
//这里支持其它颜色设置方式,比如16进制的Color.parseColor("#ff0000")
ForegroundColorSpan foregroundColorSpan = new ForegroundColorSpan(Color.RED);
ForegroundColorSpan foregroundColorSpan1 = new ForegroundColorSpan(Color.parseColor("#ff0000"));
//设置绝对字体大小(单位是像素),还有相对字体大小
AbsoluteSizeSpan absoluteSizeSpan = new AbsoluteSizeSpan(40);
AbsoluteSizeSpan absoluteSizeSpan2 = new AbsoluteSizeSpan(60);
AbsoluteSizeSpan absoluteSizeSpan3 = new AbsoluteSizeSpan(60);
//将设置的属性添加给TextView的内容
//第一个参数就是上面的颜色属性,
//2是从index为2的字符开始
//8是把这个属性应用到第7个结束,包含头不包含尾
//第四个值一共有4个常量,可以一一试试看代表什么意思
spannableStringBuilder.setSpan(foregroundColorSpan, 13, 14, Spanned.SPAN_EXCLUSIVE_INCLUSIVE);
spannableStringBuilder.setSpan(foregroundColorSpan1, 24, 26, Spanned.SPAN_EXCLUSIVE_INCLUSIVE);
spannableStringBuilder.setSpan(absoluteSizeSpan, 13, 14, Spanned.SPAN_EXCLUSIVE_INCLUSIVE);
spannableStringBuilder.setSpan(absoluteSizeSpan2, 0, 2, Spanned.SPAN_EXCLUSIVE_INCLUSIVE);
spannableStringBuilder.setSpan(absoluteSizeSpan3, 24, 26, Spanned.SPAN_EXCLUSIVE_INCLUSIVE);
textView.setText(spannableStringBuilder);
参考博客:http://blog.csdn.net/harvic880925/article/details/38984705
http://www.jianshu.com/users/769d3d3a9d4b
Demo:https://github.com/Tom1991/SpannableStringBuilder