我们在项目中很常用到一个效果,那就是一段文字,设置字体大小不一样,以求突出显示效果,或者为哪几个文字加上不同的色彩,或者加上超链接,电话,邮件等,就像是html里面的那种点击跳转的链接;
其实,Google已经提供了实现这种效果的方法给我们了,只是我们在实际开发中,很少知道有这个方法。以至于我们项目中实现这样的效果,其实都是通过两个及以上的textview来区分实现这样的效果。这样岂不是很麻烦了么;
下面我就给大家介绍实现此效果的方法,直接上代码;
SpannableString ss = new SpannableString("超链接" + "\t" +"唐卡abc");//new 一个SpannableString对象
下面是spannablestring对象的使用,直接看注释,都很清楚,就不发效果图了,直接用就OK
SpannableString ss = new SpannableString(mFormat.format(count) + "\t" + unit);
/**
* 首先拿到一个TextView,然后构造一个SpannableString,构造方法中传入的参数就是我们要显示的文字,
* 然后就是一个最终要的方法,通过setSpan来设置背景色,
* 第一个参数是我们要设置的背景颜色,
* 第二第三个参数是我们要给哪一段的文字设置背景(该段文字的startIndex和endIndex)
* 最后一个参数有四个值:
* SPAN_INCLUSIVE_EXCLUSIVE:前面包括,后面不包括,即在文本前插入新的文本会应用该样式,而在文本后插入新文本不会应用该样式
* SPAN_INCLUSIVE_INCLUSIVE:前面包括,后面包括,即在文本前插入新的文本会应用该样式,而在文本后插入新文本也会应用该样式
* SPAN_EXCLUSIVE_EXCLUSIVE:前面不包括,后面不包括
* SPAN_EXCLUSIVE_INCLUSIVE:前面不包括,后面包括
*
*/
ss.setSpan(new BackgroundColorSpan(Color.parseColor("#FFD700")), 0,
ss.length(), Spanned.SPAN_EXCLUSIVE_INCLUSIVE);
textView.append("超链接,新加的文字");
ss.setSpan(new ClickableSpan() { //添加监听回调
@Override
public void onClick(View widget) {
Toast.makeText(mContext, "超链接", Toast.LENGTH_SHORT).show();
}
}, 0, 3, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
// 设置textView为可点击状态,以下方法是设置"超链接"为可点击状态
textView.setMovementMethod(LinkMovementMethod.getInstance());
//设置前景色
ss.setSpan(new ForegroundColorSpan(Color.parseColor("#FF3030")), 0,
ss.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
/**
*设置删除线效果
* 以下还有其它的设置,都是在setSpan第一个参数里头进行设置
* new UnderlineSpan() :设置下划线
*new ScaleXSpan(2) :ScaleXSpan中的参数大于1表示横向扩大,小于1大于0表示缩小,等于1表示正常显示
* new StyleSpan(Typeface.BOLD):设置字体粗体样式,Typeface.BOLD_ITALIC:斜体+粗体
* new BackgroundColorSpan(Color.YELLOW):文字背景颜色
* new ForegroundColorSpan(Color.BLUE):文字颜色
* new AbsoluteSizeSpan(36):文字大小
* new StrikethroughSpan():删除线
*
* 上下标的使用:
* new SubscriptSpan():设置下标
* new AbsoluteSizeSpan(30):设置下标字体大小
* new SuperscriptSpan():设置上标
* new URLSpan("tel:13534884482"):打电话
* new URLSpan("smsto:13534884482"):发短信
* new URLSpan("mailto:[email protected]"):发邮件
* new URLSpan("http://www.baidu.com"):浏览网友
* 最后都要设置textView的 setMovementMethod(LinkMovementMethod.getInstance())方法
*/
ss.setSpan(new StrikethroughSpan(), 0, ss.length(),
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
/**
* 第一个参数传入一个DynamicDrawableSpan对象,
* 其中这个对象的构造函数是图片的对齐方式,一共有两种,如注释
* ,实现该类的getDrawable方法,返回一个Drawable对象即可
* ,注意这里的图片会替换掉文字(如果我们使用这种效果,很多情况下就是要让图片替换掉文字,
* 所以这并不算一个问题)
*/
ss.setSpan(
// DynamicDrawableSpan.ALIGN_BASELINE表示依照基线对齐
// DynamicDrawableSpan.ALIGN_BOTTOM表示依照底部对齐
new DynamicDrawableSpan(DynamicDrawableSpan.ALIGN_BOTTOM) {
@Override
public Drawable getDrawable() {
Drawable d = mContext.getResources().getDrawable(
R.drawable.logo_tcl);
d.setBounds(0, 0, 150, 150);
return d;
}
}, 0, 1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);// 这里的参数0,1表示将“设”字替换为图片
ss.setSpan(new AbsoluteSizeSpan(smallSize),
ss.length() - unit.length(), ss.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
textView.setText(ss);
至此,你就可以很简单的实现那些很炫的效果了。
尤其是设置图片,太常见了,在开发中。