在Android 中实现字体的一些特殊效果一般都是用SpannableString 来实现的OK,先来张图
在此实现之前先说明几个重要的属性
/** 几个重要的属性
* Spanned.SPAN_EXCLUSIVE_EXCLUSIVE 表示前后都不包括
* Spanned.SPAN_EXCLUSIVE_INCLUSIVE 前面不包括,后面包括
* Spanned.SPAN_INCLUSIVE_EXCLUSIVE 前面包括,后面不包括
* Spanned.SPAN_INCLUSIVE_INCLUSIVE 前后都包括
*/
1.实现前景色
//设置前景色
private SpannableString setForegroundColorSpan(){
SpannableString spannableString =new SpannableString("这条文字前面前景色");
spannableString.setSpan(new ForegroundColorSpan(Color.BLUE),0,4 , Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
return spannableString;
}
2.设置字体的超链接
// 设置超链接
private SpannableString setLinkLine(){
SpannableString spannableString =new SpannableString("这是一个链接");
URLSpan urlSpan =new URLSpan("http://www.baidu.com");
spannableString.setSpan(urlSpan,0,6,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
mTextView.setMovementMethod(LinkMovementMethod.getInstance());
return spannableString;
}
3.设置一个下划线的效果一般也可同过加载HTML的u标签来实现这里就不赘述
//设置下划线 也可以用HTML 的 u标签来显示
private SpannableString setUnderline(){
SpannableString spannableString =new SpannableString("我是下划线");
UnderlineSpan underlineSpan =new UnderlineSpan();
spannableString.setSpan(underlineSpan,0,5,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
return spannableString;
}
4.设置删除线
private SpannableString setDeleteLine(){
SpannableString spannableString =new SpannableString("我是删除线");
StrikethroughSpan deleteLine =new StrikethroughSpan();
spannableString.setSpan(deleteLine,0,5,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
return spannableString;
}
5.设置可以点击的字
//在点击的操作时还需要加入
mTextView.setMovementMethod(LinkMovementMethod.getInstance());
private SpannableString setClickSpan(){
SpannableString spannableString =new SpannableString("点个看看");
ClickableSpan clickableSpan =new ClickableSpan() {
@Override
public void onClick(View view) {
Toast.makeText(ColorTextActivity.this,"click",Toast.LENGTH_SHORT).show();
mTextView.setHighlightColor(Color.TRANSPARENT); //消除变色后字体变色
}
@Override
public void updateDrawState(TextPaint ds) {
super.updateDrawState(ds);
ds.setColor(Color.GREEN); // 设置可点击字体的颜色
ds.setUnderlineText(false); //设置没有下划线
ds.clearShadowLayer();
}
};
spannableString.setSpan(clickableSpan,0,4,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
return spannableString;
}
6.是SpannableStringBuilder 的一个用法
private void setSpannableBuilder(){
SpannableStringBuilder builder =new SpannableStringBuilder();
builder.append(setForegroundColorSpan());
builder.append(setLinkLine());
builder.append(setUnderline());
builder.append(setDeleteLine());
builder.append(setClickSpan());
mTextView.setText(builder); // 将内容显示在textview上
}
OK,打完收工