java :
package com.a;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.regex.PatternSyntaxException;
import android.net.Uri;
import android.os.Bundle;
import android.app.Activity;
import android.graphics.Color;
import android.text.Spannable;
import android.text.SpannableStringBuilder;
import android.text.Spanned;
import android.text.TextPaint;
import android.text.style.ClickableSpan;
import android.text.style.URLSpan;
import android.text.util.Linkify;
import android.util.Log;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;
public class AlinkActivity extends Activity {
private TextView tv;
private static final String TAG = "AlinkActivity";
private Activity mActivity;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_alink);
mActivity = this;
tv = (TextView) findViewById(R.id.t1);
String text = "Google wewew \n电话:1234812121 \n邮件:sd1233333@qq.com \n网址:www.baidu.com ";
//给选中的文字添加链接和点击事件
setTextLinkedStringBuilder("Google", tv, text,"http://www.google.com");
//修改audoLink 的超链接样式
setURLHightLight(tv);
}
private void setURLHightLight(TextView tv) {
Linkify.addLinks(tv, Linkify.ALL); //不要在xml中添加 android:autoLink="all"
Spannable sp = (Spannable) tv.getText();
int end = sp.length();
URLSpan[] urlSpans = sp.getSpans(0, end, URLSpan.class);
SpannableStringBuilder ssb = new SpannableStringBuilder(sp);
// ssb.clearSpans(); // here no need clear all old spans
for (URLSpan urlSpan : urlSpans) {
Uri uri = Uri.parse(urlSpan.getURL());
Log.e(TAG, "urlSpan " + uri.getScheme() + " " + uri);
ssb.removeSpan(urlSpan);
ssb.setSpan(new HightlightURLSpan(urlSpan.getURL()), sp.getSpanStart(urlSpan),
sp.getSpanEnd(urlSpan), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}
tv.setText(ssb);
}
/**
*
* @author alvin
* 替换 audolink 的样式
*
*/
class HightlightURLSpan extends URLSpan {
private String url;
public HightlightURLSpan(String url) {
super(url);
this.url = url;
}
@Override
public void updateDrawState(TextPaint ds) {
ds.setColor(Color.parseColor("#ff00ff"));// 指定颜色值
ds.setUnderlineText(false); // 去掉下划线
ds.setFakeBoldText(true);
}
@Override
public void onClick(View widget) {
Toast.makeText(mActivity, url, 0).show();
Log.e(TAG, url);
}
}
protected SpannableStringBuilder setTextLinkedStringBuilder(String key,
TextView tv, CharSequence text,String mURL) {
SpannableStringBuilder ssb = new SpannableStringBuilder(text);
Pattern pKey = null;
try {
pKey = Pattern.compile(key, Pattern.CASE_INSENSITIVE);
} catch (PatternSyntaxException e) {
e.printStackTrace();
return ssb;
}
Matcher m = pKey.matcher(ssb);
while (m.find()) {
Log.e("TAG", "m:" + m.start() + "--" + m.end());
ssb.setSpan(new LinkTextSpan(mURL), m.start(), m.end(),
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
}
tv.setText(ssb);
/**
* tv.setMovementMethod(LinkMovementMethod.getInstance());
* 再设置玩text之后调用
*/
Linkify.addLinks(tv, Linkify.ALL);
return ssb;
}
/**
* @author alvin
* 显示的文字不是链接,所以不继承 URLSpan,要不然设置无效
*/
class LinkTextSpan extends ClickableSpan {
private static final String COLOR_HIGHT = "#659800";
private String url;
public LinkTextSpan(String url) {
super();
this.url = url;
}
@Override
public void onClick(View widget) {
Toast.makeText(mActivity, url, 0).show();
Log.e(TAG, url);
}
@Override
public void updateDrawState(TextPaint ds) {
ds.setColor(Color.parseColor(COLOR_HIGHT));
ds.setUnderlineText(true);
ds.setFakeBoldText(true);
}
}
}
下面时xml
<TextView
android:id="@+id/t1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textSize="25dp" />