1. 创建SpannableStringBuilder对象
(kotlin代码)
var builder = SpannableStringBuilder()
2.改变文字大小
SpannableStringUtils.addTextSizeToMsg(builder,"¥",1f)
SpannableStringUtils.addTextSizeToMsg(builder,"2980",1.5f)
SpannableStringUtils.addTextSizeToMsg(builder,".00",1f)
coursePrice.text = builder //把builderset进text中,相当于java的 textView.setText()
最终效果
3 改变文字颜色
SpannableStringUtils.addTextSizeToMsg(builder,"¥",1f)
SpannableStringUtils.addColorTextToMsg(getColor(R.color.black),builder,"10000")
SpannableStringUtils.addTextSizeToMsg(builder,".00",1f)
4 使一行文字中的部分文字可以点击
SpannableStringUtils.addTextSizeToMsg(builder,"¥",1f)
SpannableStringUtils.addColorTextWithClickEvent(resources.getColor(R.color.xn_blue),builder,"10000",{
Toast.makeText(applicationContext,"show toast",Toast.LENGTH_LONG).show()
})
SpannableStringUtils.addTextSizeToMsg(builder,".00",1f)
点击下面效果图蓝色部分则可以弹出toast:
5.最后把上面创建的builder设置进text中
textView.setMovementMethod(LinkMovementMethod.getInstance())//假如需要设置部分文字可点击的话必须添加此行设置代码
textView.setText(builder);
6.工具类源码
下面是对应的工具类大家复制即可
/**
* Created by zhou on 2017/5/22.
*/
public class SpannableStringUtils {
//添加指定颜色的文字到spannable中
public static void addColorTextToMsg(int color, SpannableStringBuilder spsBuilder, String content){
SpannableString contentSps = new SpannableString(content);
contentSps.setSpan(new ForegroundColorSpan(color), 0,content.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
spsBuilder.append(contentSps);
}
/**
* 字符串变色方法,简洁版
* @param color 要变成的颜色
* @param colorStr 要变色的字符串
* @param endStr 不变色的字符串
* @return
*/
public static SpannableStringBuilder addColorToText(int color,String colorStr,String endStr){
SpannableStringBuilder builder = new SpannableStringBuilder();
addColorTextToMsg(color,builder,colorStr);
builder.append(endStr);
return builder;
}
//添加指定颜色指定大小的文字到spannable中
public static void addTextSizeToMsg(SpannableStringBuilder spsBuilder, String content, float size){
SpannableString contentSps = new SpannableString(content);
contentSps.setSpan(new RelativeSizeSpan(size), 0,content.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
spsBuilder.append(contentSps);
}
public static void addColorTextWithClickEvent(final int color, SpannableStringBuilder spsBuilder, String content, final OnTextClickListener onTextClickListener){
SpannableString contentSps = new SpannableString(content);
// contentSps.setSpan(new ForegroundColorSpan(color), 0,content.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
contentSps.setSpan(new ClickableSpan() {
@Override
public void updateDrawState(TextPaint ds) {
super.updateDrawState(ds);
ds.setColor(color);
ds.setUnderlineText(false); //设置下划线
}
@Override
public void onClick(View widget) {
onTextClickListener.onClick();
}
}, 0,content.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
spsBuilder.append(contentSps);
}
public interface OnTextClickListener{
void onClick();
}
}