1.有的时候我们会有这样的需求,在一个TextView中显示文本。但是文本的如果含有链接的时候要识别出来,显示成链接的形式。
TextView可以设置属性来实现超链接的显示,即当textview中含有以"http"或"https"等开头的一些链接的时候会显示成链接的形式。
最简单的方式就是在xml中设置autoLink属性。autoLink属性有六个值,分别是:
none:正常
web:将文本标识成一个网址
phone:将文本标识成一个电话号码
mail:将文本标识成一个邮件地址
map:会打开地图应用
all:根据文本自动识别
如:
<TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:autoLink="web" android:text="Hello World!" />
2.有的时候在满足的显示成链接的情况下我们还会需要设置链接的点击效果,我们希望能够在app内部打开,或者能够解析链接,然后跳到我们我们期望的页面。但是
在上述的情况下我们点击链接会总是跳到浏览器,所以我们需要怎么设置呢?
1)xml:在xml中设置android:autoLink="web"
<TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:autoLink="web" android:text="Hello World!" />2)自定义一个ClickableSpan。private class MyURLSpan extends ClickableSpan { private String url; public MyURLSpan(String url) { this.url = url; } @Override public void onClick(View arg0) { Log.i("ruxing","链接被点击:"+url); //在这里可以解析url进行跳转操作 } }3)在代码里设置TextView完整的代码地址:https://github.com/ruxing1102/TextViewLinkClicktv_content=(TextView)findViewById(R.id.tv_content); CharSequence text = tv_content.getText(); if (text instanceof Spannable) { int end = text.length(); Spannable sp = (Spannable) text; URLSpan urls[] = sp.getSpans(0, end, URLSpan.class); SpannableStringBuilder style = new SpannableStringBuilder(text); style.clearSpans(); for (URLSpan urlSpan : urls) { MyURLSpan myURLSpan = new MyURLSpan(urlSpan.getURL()); style.setSpan(myURLSpan, sp.getSpanStart(urlSpan), sp.getSpanEnd(urlSpan), Spannable.SPAN_EXCLUSIVE_INCLUSIVE); } tv_content.setText(style); }