public class TestLinkActivity extends Activity {
private TextView tv ;
@Override
public void onCreate (Bundle savedInstanceState) {
super .onCreate(savedInstanceState);
tv = new TextView(this );
tv .setClickable(false );
String htmlLinkText = "<a href= \" 测试 \" >link</a> specified via an <a> tag." ;
// 文字的样式( style )被覆盖,不能改变 ……
tv .setText(Html.fromHtml (htmlLinkText));
tv .setMovementMethod(LinkMovementMethod.getInstance ());
CharSequence text = tv .getText();
if (text instanceof Spannable) {
int end = text.length();
Spannable sp = (Spannable) tv .getText();
URLSpan[] urls = sp.getSpans(0 , end, URLSpan.class );
SpannableStringBuilder style = new SpannableStringBuilder(text);
style.clearSpans(); // should clear old spans
for (URLSpan url : urls) {
MyURLSpan myURLSpan = new MyURLSpan(url.getURL());
style.setSpan(myURLSpan, sp.getSpanStart(url), sp.getSpanEnd(url), Spannable.SPAN_EXCLUSIVE_INCLUSIVE );
}
tv .setText(style);
}
setContentView(tv );
}
private class MyURLSpan extends ClickableSpan {
private String mUrl ;
MyURLSpan(String url) {
mUrl = url;
}
@Override
public void onClick (View widget) {
Toast.makeText (TestLinkActivity.this, mUrl , Toast.LENGTH_LONG ).show();
widget.setBackgroundColor(Color.parseColor ("#00000000" ));
Intent intent = new Intent(TestLinkActivity.this, MyActivity.class );
startActivity(intent);
}
}
}
TextView是用来显示文本的,有时需要给TextView中的个别字设置为超链接,或者设置个别字的颜色、字体等,那就需要用到Spannable对象,可以借助Spannable对象实现以上设置 myTextView = (TextView) this .findViewById(R.id.myTextView); //创建一个 SpannableString对象 SpannableString sp = new SpannableString( "这句话中有百度超链接,有高亮显示,这样,或者这样,还有斜体." ); //设置超链接 sp.setSpan(new URLSpan( "http://www.baidu.com" ), 5 , 7 , Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //设置高亮样式一 sp.setSpan(new BackgroundColorSpan(Color.RED), 17 , 19 ,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); //设置高亮样式二 sp.setSpan(new ForegroundColorSpan(Color.YELLOW), 20 , 24 ,Spannable.SPAN_EXCLUSIVE_INCLUSIVE); //设置斜体 sp.setSpan(new StyleSpan(android.graphics.Typeface.BOLD_ITALIC), 27 , 29 , Spannable.SPAN_EXCLUSIVE_INCLUSIVE); //SpannableString对象设置给TextView myTextView.setText(sp); //设置TextView可点击 myTextView.setMovementMethod(LinkMovementMethod.getInstance());