美文网首页
android文本超链接显示点击跳转

android文本超链接显示点击跳转

作者: dream_5219 | 来源:发表于2017-11-05 23:53 被阅读0次

一般我们在项目中会有这样的需求,要求文本中超链接显示出来并点击可以跳转到对应的web网页界面。而TextView本身就自带这样的属性,在xml布局文件里设置android:autoLink="web"这行代码就可以把web链接显示出来。但是经测试,发现原生并不能达到我们项目中的预期项目,那么就需要我们重写来达到我们的预期效果。下面是效果图,把文本的超链接显示出来并可以设置点击事件。

那么我们现在来看看怎么实现,主要的封装了2个类,LinkedUtils类:

public class LinkedUtils {

private static Pattern URL_PATTERN_DEFAULT= Pattern.compile("((http|https):\\/\\/)?([a-zA-Z0-9-]+\\.){1,5}(com|cn|net|org|hk|tw)((\\/(\\w|-)+(\\.([a-zA-Z]+))?)+)?(\\/)?(\\??([\\.%:a-zA-Z0-9_-]+=[#\\.%:a-zA-Z0-9_-]+(&)?)+)?");

public static Spannable String getUrlSpan(String txt) {

SpannableString value = SpannableString.valueOf(txt);

Linkify.addLinks(value, LinkedUtils.URL_PATTERN_DEFAULT,"");

URLSpan[] urlSpans = value.getSpans(0, value.length(), URLSpan.class);

for(URLSpan urlSpan : urlSpans) {

int start = value.getSpanStart(urlSpan);

int end = value.getSpanEnd(urlSpan);

value.removeSpan(urlSpan);

value.setSpan(newUrlLinkSpan(urlSpan.getURL()), start, end, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);}

return value;

}

/**

* 文字链接处理

*/

public static class UrlLinkSpanextendsClickableSpan {

private String mUrl;

private int highColor=0xff576b95;

publicUrlLinkSpan(String url) {

mUrl= url;

}

@Override

public void onClick(View widget) {

Toast.makeText(widget.getContext(),"天气真好:》》",Toast.LENGTH_LONG).show();//这里可以操作获取的超链接

}

@Override

public void updateDrawState(TextPaint ds) {

super.updateDrawState(ds);

ds.setColor(highColor);

ds.setUnderlineText(false);

}}}

另一个类是为了解决文本长按时和点击链接触发的冲突:

public class LinkMovementClickMethod extends LinkMovementMethod {

private long lastClickTime;

private static final longCLICK_DELAY=500l;

@Override 

public boolean onTouchEvent(TextView widget, Spannable buffer, MotionEvent event) {

int action = event.getAction();

if(action == MotionEvent.ACTION_UP||action == MotionEvent.ACTION_DOWN) {

int x = (int) event.getX();

int y = (int) event.getY();

x -= widget.getTotalPaddingLeft();

y -= widget.getTotalPaddingTop();

x += widget.getScrollX();

y += widget.getScrollY();

Layout layout = widget.getLayout();

int line = layout.getLineForVertical(y);

int off = layout.getOffsetForHorizontal(line, x);

ClickableSpan[] link = buffer.getSpans(off, off, ClickableSpan.class);

if(link.length!=0) {

if(action == MotionEvent.ACTION_UP) {

if(System.currentTimeMillis() -lastClickTime

link[0].onClick(widget);

}

}else if(action == MotionEvent.ACTION_DOWN) {

Selection.setSelection(buffer,

buffer.getSpanStart(link[0]),

buffer.getSpanEnd(link[0]));

lastClickTime= System.currentTimeMillis();

}

return true;

}else{

Selection.removeSelection(buffer);

}}

return super.onTouchEvent(widget, buffer, event);

}

public static LinkMovementClickMethod getInstance(){

if(null==sInstance){

sInstance=newLinkMovementClickMethod();

}

return sInstance;

}

private static LinkMovementClickMethod sInstance;

}

之后有了这两个类就是我们的使用了,使用的方式十分简单:

tv_link.setMovementMethod(LinkMovementClickMethod.getInstance());

tv_link.setText(LinkedUtils.getUrlSpan(tv_link.getText().toString()));

只要这两行代码就可以实现效果了。

相关文章

  • android文本超链接显示点击跳转

    一般我们在项目中会有这样的需求,要求文本中超链接显示出来并点击可以跳转到对应的web网页界面。而TextView本...

  • Swift YYLabel处理Html富文本超链接跳转

    一、返回html数据是: p标签, a标签包含的显示文本 二、非HTML文本包含超链接,点击超链接跳转 三、工具类...

  • UITextView富文本超链接点击

    UITextView富文本超链接点击 用UITextView显示富文本的时候,如果富文本中有超链接,有时候需要单独...

  • Qml超链接

    文本使用html超链接显示, 被点击的时候调用Qt.openUrlExternally来使用默认应用打开超链接 需...

  • TextView识别文本中的超链接并能点击跳转

    需求: 如题所诉。需要识别出文本中的链接,并显示成超链接的UI样式。点击能够跳转打开网页(最好是自己app内部的W...

  • Qt Label控件

    Label控件是一个常用的控件,我们可以用它显示文本,显示html超文本,放置可点击的超链接,显示图片,动画等等。...

  • 超链接使用

    属性详解 超链接 href:跳转的页面(必填属性) title:提示文本(鼠标放到链接上显示的文字) target...

  • html超链接

    超链接标签a 超链接使用: 超链接属性: href - - -指明要跳转到的地址 eg: \点击跳转到百度 ,...

  • MacOS 开发(十二):选择状态下NSTextField字体变

    需求:要在 NSTextField/NSTextView 中显示可点击富文本(跳转网页) AuthorInfoCo...

  • Android TextView 点击超链接跳转实现

    前提:之前遇到过一次textview显示url的方式,但是并未深入探究。但是,上个礼拜一个朋友问我如何在textv...

网友评论

      本文标题:android文本超链接显示点击跳转

      本文链接:https://www.haomeiwen.com/subject/blhkmxtx.html