EditText中如果包含URL,点击可跳转


如果产品经理告诉你,我要一个EditText,用来记住一些标签,如果输入了一个网址,我点击这个网址,可以直接跳转到浏览器,那么你该怎么去实现呢?

大家都知道EditText是继承自TextView,而TextView则是可以通过添加ClickableSpan来进行定制文字的跳转的,EditText同样也可以通过这种方案来实现。
下面就先通过使用系统的URLSpan来实现这种效果。

  1. 在.xml文件中,可以给EditText先添加一个属性:
     android:autoLink="web"
  1. 在代码中,给EditText添加方法:
        //必须指定该方法,否则EditText的URL是不会进行跳转的。
        editText.setMovementMethod(LinkMovementMethod.getInstance());
        //将要给EditText赋值的参数用Sapnnable包裹一下
        Spannable spannable = new SpannableString(itemEntity.name);
        //通过Linkify来制定匹配方式
        Linkify.addLinks(spannable, Linkify.WEB_URLS);
        // 添加了零宽度空格(?\u200B???), 才可以点击到最后的位置, 否则会触发链接
        final CharSequence text = TextUtils.concat(spannable, "\u200B");
        editText.setText(text);

这样,我们就实现了EditText中包含URL可以跳转的方案了,当然,我们也可以自己定制Span。
有一个奇怪的问题,如果这个EditText是在一个ViewPager+Fragment+RecyclerView中,作为RecyclerView中的item,输入》】等符号的时候,会导致ViewPager自动切换,暂时没找到解决方案。如果有解决办法的朋友,可以回复我一下,谢谢。

你可能感兴趣的:(EditText中如果包含URL,点击可跳转)