看到一篇说Span的文章,留做备用,来源:http://orgcent.com/android-textview-spannablestring-span/
import android.app.Activity;
import android.graphics.BlurMaskFilter;
import android.graphics.Color;
import android.graphics.EmbossMaskFilter;
import android.graphics.Rasterizer;
import android.graphics.Typeface;
import android.graphics.BlurMaskFilter.Blur;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.text.Spannable;
import android.text.SpannableString;
import android.text.method.LinkMovementMethod;
import android.text.style.AbsoluteSizeSpan;
import android.text.style.BackgroundColorSpan;
import android.text.style.DynamicDrawableSpan;
import android.text.style.ForegroundColorSpan;
import android.text.style.ImageSpan;
import android.text.style.MaskFilterSpan;
import android.text.style.RasterizerSpan;
import android.text.style.RelativeSizeSpan;
import android.text.style.ScaleXSpan;
import android.text.style.StrikethroughSpan;
import android.text.style.StyleSpan;
import android.text.style.SubscriptSpan;
import android.text.style.SuperscriptSpan;
import android.text.style.TextAppearanceSpan;
import android.text.style.TypefaceSpan;
import android.text.style.URLSpan;
import android.text.style.UnderlineSpan;
import android.widget.TextView;
public class SpanTestActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
TextView displayText = (TextView) findViewById(R.id.display);
// BackgroundColorSpan
SpannableString spanText = new SpannableString("吾将上下而求索 -- http://google.com");
spanText.setSpan(new BackgroundColorSpan(Color.GREEN), 0, spanText.length(), Spannable.SPAN_INCLUSIVE_EXCLUSIVE);;
displayText.append(spanText);
// ForegroundColorSpan
spanText = new SpannableString("吾将上下而求索 -- http://google.com");
spanText.setSpan(new ForegroundColorSpan(Color.BLUE), 5, 7, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
displayText.append("\n");
displayText.append(spanText);
// MaskFilterSpan
spanText = new SpannableString("吾将上下而求索 -- http://google.com");
int length = spanText.length();
//模糊(BlurMaskFilter)
MaskFilterSpan maskFilterSpan = new MaskFilterSpan(new BlurMaskFilter(3, Blur.OUTER));
spanText.setSpan(maskFilterSpan, 0, length - 10, Spannable.
SPAN_INCLUSIVE_EXCLUSIVE);
//浮雕(EmbossMaskFilter)
maskFilterSpan = new MaskFilterSpan(new EmbossMaskFilter(new float[]{1,1,3}, 1.5f, 8, 3));
spanText.setSpan(maskFilterSpan, length - 10, length, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
displayText.append("\n");
displayText.append(spanText);
// RasterizerSpan
spanText = new SpannableString("吾将上下而求索 -- http://google.com");
spanText.setSpan(new RasterizerSpan(new Rasterizer()), 0, 7, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
displayText.append("\n");
displayText.append(spanText);
// StrikethroughSpan
spanText = new SpannableString("吾将上下而求索 -- http://google.com");
spanText.setSpan(new StrikethroughSpan(), 0, 7, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
displayText.append("\n");
displayText.append(spanText);
// UnderlineSpan
spanText = new SpannableString("吾将上下而求索 -- http://google.com");
spanText.setSpan(new UnderlineSpan(), 0, spanText.length(), Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
displayText.append("\n");
displayText.append(spanText);
// AbsoluteSizeSpan
spanText = new SpannableString("吾将上下而求索 -- http://google.com");
spanText.setSpan(new AbsoluteSizeSpan(20, true), 0, spanText.length(), Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
displayText.append("\n");
displayText.append(spanText);
// DynamicDrawableSpan
DynamicDrawableSpan drawableSpan = new DynamicDrawableSpan(DynamicDrawableSpan.ALIGN_BASELINE) {
@Override
public Drawable getDrawable() {
Drawable d = getResources().getDrawable(R.drawable.ic_launcher);
d.setBounds(0, 0, 50, 50);
return d;
}
};
DynamicDrawableSpan drawableSpan2 = new DynamicDrawableSpan(DynamicDrawableSpan.ALIGN_BOTTOM) {
@Override
public Drawable getDrawable() {
Drawable d = getResources().getDrawable(R.drawable.ic_launcher);
d.setBounds(0, 0, 50, 50);
return d;
}
};
spanText.setSpan(drawableSpan, 3, 4, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
spanText.setSpan(drawableSpan2, 7, 8, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
displayText.append("\n");
displayText.append(spanText);
// ImageSpan
spanText = new SpannableString("吾将上下而求索 -- http://google.com");
Drawable d = getResources().getDrawable(R.drawable.ic_launcher);
d.setBounds(0, 0, 50, 50);
spanText.setSpan(new ImageSpan(d), 3, 4, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
displayText.append("\n");
displayText.append(spanText);
// RelativeSizeSpan
spanText = new SpannableString("吾将上下而求索 -- http://google.com");
// 参数proportion:比例大小
spanText.setSpan(new RelativeSizeSpan(2.5f), 5, 7, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
displayText.append("\n");
displayText.append(spanText);
// ScaleXSpan
spanText = new SpannableString("吾将上下而求索 -- http://google.com");
//参数proportion:比例大小
spanText.setSpan(new ScaleXSpan(3.8f), 5, 7, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
displayText.append("\n");
displayText.append(spanText);
// StyleSpan
spanText = new SpannableString("吾将上下而求索 -- http://google.com");
//Typeface.BOLD_ITALIC:粗体+斜体
spanText.setSpan(new StyleSpan(Typeface.BOLD_ITALIC), 5, 7, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
displayText.append("\n");
displayText.append(spanText);
// SubscriptSpan
spanText = new SpannableString("吾将上下而求索 -- http://google.com");
spanText.setSpan(new SubscriptSpan(), 5, 7, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
displayText.append("\n");
displayText.append(spanText);
// SuperscriptSpan
spanText = new SpannableString("吾将上下而求索 -- http://google.com");
spanText.setSpan(new SuperscriptSpan(), 5, 7, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
displayText.append("\n");
displayText.append(spanText);
// TextAppearanceSpan
spanText = new SpannableString("吾将上下而求索 -- http://google.com");
//若需自定义TextAppearance,可以在系统样式上进行修改
spanText.setSpan(new TextAppearanceSpan(this, android.R.style.TextAppearance_Medium), 5, 7, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
displayText.append("\n");
displayText.append(spanText);
// TypefaceSpan
spanText = new SpannableString("吾将上下而求索 -- http://google.com");
//若需使用自定义字体,可能要重写类TypefaceSpan
spanText.setSpan(new TypefaceSpan("monospace"), 5, 7, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
displayText.append("\n");
displayText.append(spanText);
// URLSpan
spanText = new SpannableString("吾将上下而求索 -- GOOGLE");
spanText.setSpan(new URLSpan("http://google.com"), 10, spanText.length(), Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
displayText.append("\n");
displayText.append(spanText);
//让URLSpan可以点击
displayText.setMovementMethod(new LinkMovementMethod());
}
}
效果图片:
多说一句:当开发中需要做一些特殊操作时,可以考虑继承以上合适的Span,然后做相关处理!