Spanable中的常用常量:
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE --- 不包含start和end所在的端点 (a,b)
Spanned.SPAN_EXCLUSIVE_INCLUSIVE --- 不包含端start,但包含end所在的端点 (a,b]
Spanned.SPAN_INCLUSIVE_EXCLUSIVE --- 包含start,但不包含end所在的端点 [a,b)
Spanned.SPAN_INCLUSIVE_INCLUSIVE--- 包含start和end所在的端点 [a,b]
1.改变字体的不同颜色
String text = String.format("¥%1$s 门市价:¥%2$s", 18.6, 22); SpannableStringBuilder style = new SpannableStringBuilder(text); int z = text.lastIndexOf("门"); /** * ForegroundColorSpan设置前景的颜色 */ style.setSpan(new ForegroundColorSpan(Color.RED), 0, 2,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE ); style.setSpan(new ForegroundColorSpan(Color.YELLOW), 2, 4,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE ); style.setSpan(new ForegroundColorSpan(Color.GREEN), 4, 6,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE ); textView2.setText(style);
2.改变字体大小 颜色 加换行
/** * 改变字体大小 颜色 加换行 */ Spannable span = new SpannableString("2017"+"\n"+"-03-02"); span.setSpan(new RelativeSizeSpan(1.5f), 0, 4, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); span.setSpan(new RelativeSizeSpan(3.0f), 5, 11, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); span.setSpan(new ForegroundColorSpan(Color.RED), 0, 11, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); /** * BackgroundColorSpan设置背景色,为0代表不设置背景色默认为activity背景色 */ //span.setSpan(new BackgroundColorSpan(Color.WHITE), 0, 10, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); span.setSpan(0, 0, 10, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); textView3.setText(span);
3.带有URL的TextView文本
String msg = "带有URL的TextView文本《点击这里跳转》"; SpannableString smp = new SpannableString(msg); ClickableSpan clickableSpan = new ClickableSpan() { @Override public void onClick(View widget) { startActivity(new Intent(MainActivity.this, Main2Activity.class)); } @Override public void updateDrawState(TextPaint ds) { /** * 这里如果设置为false则不带下划线,true带有下划线 */ ds.setUnderlineText(false); } } ; /** * 设置点击的范围 */ smp.setSpan(clickableSpan, msg.indexOf("《") + 1, msg.lastIndexOf("》"), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); /** * 设置前景色 */ smp.setSpan(new ForegroundColorSpan(Color.parseColor("#0AC3BC")), msg.indexOf("《"), msg.lastIndexOf("》") + 1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); textView4.setText(smp); /** * 设置添加链接 */ textView4.setMovementMethod(LinkMovementMethod.getInstance());
4.带有下划线的文本
String content="带有下划线的文本"; SpannableString ssb = new SpannableString(content); ssb.setSpan(new UnderlineSpan(), 0, 6, Spanned.SPAN_INCLUSIVE_INCLUSIVE); textView5.setText(ssb);