以下介绍SpannableString 对文字的一些特别处理:比如字体,颜色,下划线,链接和点击事件。
先看效果:
布局代码就不贴了,很简单就是3个TextView.现在看MainActivity中的代码实现:
private TextView mTvContent1;
private TextView mTvContent2;
private TextView mTvContent3;
private String contentStr1 = "点击事件,下划线,字体颜色";
private String contentStr2 = "百度链接";
private String contentStr3 = "粗体";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//设置点击事件,下划线,字体颜色
mTvContent1 = (TextView) findViewById(R.id.tv_content1);
SpannableString ss1 = new SpannableString(contentStr1);
ss1.setSpan(new ClickableSpan() {
@Override
public void updateDrawState(TextPaint ds) {
super.updateDrawState(ds);
ds.setUnderlineText(true);//设置下划线
ds.setColor(Color.RED);//设置字体颜色
}
@Override
public void onClick(View widget) {
Toast toast = Toast.makeText(MainActivity.this, "点击", Toast.LENGTH_SHORT);
toast.show();
}
}, 0, contentStr1.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
mTvContent1.setText(ss1);
mTvContent1.setHighlightColor(Color.TRANSPARENT);
mTvContent1.setMovementMethod(LinkMovementMethod.getInstance());
//设置链接
mTvContent2= (TextView) findViewById(R.id.tv_content2);
SpannableString ss2 = new SpannableString(contentStr2);
ss2.setSpan(new URLSpan("http://www.baidu.com"), 0, contentStr2.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
mTvContent2.setText(ss2);
mTvContent2.setMovementMethod(LinkMovementMethod.getInstance());
//设置粗体:
mTvContent3= (TextView) findViewById(R.id.tv_content3);
SpannableString ss3 = new SpannableString(contentStr3);
ss3.setSpan(new StyleSpan(android.graphics.Typeface.BOLD), 0, contentStr3.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
mTvContent3.setText(ss3);
}
}
以上就是整个代码:其中对于点击和链接事件,要特别注意需要setMovementMethod,否则可能不会响应事件。