作者:501917112_0de975_837 | 来源:互联网 | 2024-09-29 10:19
发现很多时候展示一堆文字,需要让局部的某些字变粗啊,变大、变颜色、能点击等等要求,今天在这简单总结下方便日后直接复用(用html写的也很简单,在这就不写了),在这里我用 SpannableString 这个类实现下(SpannableStringBuilder 也可以自己看下,大体相似)
String str1 = “欢迎来北京”;
String str2 = "一起看";
String str3 = "太阳";
上面分成三部分,让第二部分实现以下功能;
1、让局部字体变色
SpannableString ss = new SpannableString(str1+ str2 + str6_3 + str3);
ForegroundColorSpan redSpan = new ForegroundColorSpan(Color.RED);//红色
ss.setSpan(redSpan,str1.length(),str1.length()+str2.length(),Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);//sr2的字体变色
TextView cOntent= (TextView) findViewById(R.id.content);
content.append(ss);
2、让局部变色可点击有下划线,俗称超链接
SpannableString ss = new SpannableString(str1+ str2 + str6_3 + str3);
ClickableSpan cs1 = new ClickableSpan() {@Override
public void onClick(View widget) {//点击事件操作avoidHintColor(widget);//设置变色部分字体的背景,不设置的话有一个背景色,在这里我设成透明}@Override
public void updateDrawState(TextPaint ds) {super.updateDrawState(ds);ds.setColor(getResources().getColor(R.color.black_blue));}
};
ss1.setSpan(cs1, str1_1.length(), str1_1.length() + str1_2.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
content1.append(ss1);
content1.setMovementMethod(LinkMovementMethod.getInstance());//设置超链接
//变色字体部分背景设置成透明得到
private void avoidHintColor(View view) {if (view instanceof TextView)((TextView) view).setHighlightColor(getResources().getColor(android.R.color.transparent));
}
3.让局部字体变大、变粗等等看下面可以自己设置啦
AbsoluteSizeSpan(int size) —— 设置字体大小,参数是绝对数值,相当于Word中的字体大小
RelativeSizeSpan(float proportion) —— 设置字体大小,参数是相对于默认字体大小的倍数,比如默认字体大小是x, 那么设置后的字体大小就是x*proportion,这个用起来比较灵活,proportion>1就是放大(zoom in), proportion<1就是缩小(zoom out)
ScaleXSpan(float proportion) —— 缩放字体,与上面的类似,默认为1,设置后就是原来的乘以proportion,大于1时放大(zoon in),小于时缩小(zoom out)
BackgroundColorSpan(int color) —— 背景着色,参数是颜色数值,可以直接使用android.graphics.Color里面定义的常量,或是用Color.rgb(int, int, int)
ForegroundColorSpan(int color) —— 前景着色,也就是字的着色,参数与背景着色一致
TypefaceSpan(String family) —— 字体,参数是字体的名字比如“sans”, “sans-serif”等
StyleSpan(Typeface style) —— 字体风格,比如粗体,斜体,参数是android.graphics.Typeface里面定义的常量,如Typeface.BOLD,Typeface.ITALIC等等。