Android TextView 可以通过
android:autoLink="phone" 来设置文字的默认点击行为。 我们也可以自己定义文字的点击行为
TextView textView = (TextView) findViewById(R.id.span_text); StringBuilder sb = new StringBuilder(); sb.append("个人信息"); sb.append("<a href=address" + ">" + "地址</a>"); sb.append("<a href=name" + ">" + "名字</a>"); textView.setText(Html.fromHtml(sb.toString())); textView.setMovementMethod(LinkMovementMethod.getInstance()); textView.setHighlightColor(Color.TRANSPARENT);//去掉点击后的蓝色背景 CharSequence text = textView.getText(); if (text instanceof Spannable) { int end = text.length(); Spannable sp = (Spannable) textView.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); } textView.setText(style); }
class MyURLSpan extends ClickableSpan{ String url; @Override public void updateDrawState(TextPaint ds) { super.updateDrawState(ds); ds.setColor(Color.parseColor("#f37021"));//颜色 ds.setUnderlineText(false);//去掉下划线 } public MyURLSpan(String url) { this.url = url; } @Override public void onClick(View widget) { Toast.makeText(MainActivity.this, url + " is clicked" ,Toast.LENGTH_SHORT).show(); } }