如果产品经理告诉你,我要一个EditText,用来记住一些标签,如果输入了一个网址,我点击这个网址,可以直接跳转到浏览器,那么你该怎么去实现呢?
大家都知道EditText是继承自TextView,而TextView则是可以通过添加ClickableSpan来进行定制文字的跳转的,EditText同样也可以通过这种方案来实现。
下面就先通过使用系统的URLSpan来实现这种效果。
- 在.xml文件中,可以给EditText先添加一个属性:
android:autoLink="web"
- 在代码中,给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自动切换,暂时没找到解决方案。如果有解决办法的朋友,可以回复我一下,谢谢。