`
v5browser
  • 浏览: 1137595 次
社区版块
存档分类
最新评论

自定义Android TextView超链接处理

 
阅读更多

Android的TextView可以设置超链接,这些超链接都可以相应的跳转到对应的应用.!

例如,你如果设置了autoLink为Phone,那么你点击的时候就会到拨号的那个页面去! email和html超链接同理.


项目中本来有个是写在TextView里的, 同事给加了AutoLink为Phone. 但是项目中其他的地方(例如Dialog) 都是一点就直接打电话的. 那么此时我就想

能不能不用TextView自己的那一套玩意! 我首先想到继承TextView, 这个我后来看了下, 一是这里基于SDK开发并且木有源代码给我看, 而且工作量未知,所以放弃.

网上搜了一堆资料. 还是有启发. 用Spanable去对TextView进行一些设置, 让他处理我自己定义的东东!

SDK里面关于Spanable的API描述的太少了! 借着网上的资料和摸索, 把功能实现了.

1: 获得TextView

这个就findViewById获取就可以了

2: 创建SpannableString

构造方法里面要接收一个源字符串(String source), 那么大家要注意了, 这个字符串是会全部显示在TextView中的.

例如我这里的源字符串是: :400-xxx-xxxx

3:给SpannableString设置超链接

spString.setSpan(new YURLSpan("tel:400xxxxxxx"), 5, spString.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

这里面第一个参数是 Span的类型, 我这里就写一个UrlSpan, 跟源码得知,其实文字的链接属性只需要给一个ClickableSpan就可以了

第二个参数的意思是 超链接的部分从源字符串中开始的索引, 第三个参数是超链接的部分从源字符串中结束的索引. 第四个参数是flag, 有兴趣的自己去研究下

4: 让超链接可点

textView.setMovementMethod(LinkMovementMethod.getInstance());

一定要设置这个, 不设置超链接无法点击

5: 设置TextView的文字

textView.setText(spString);
6:创建ClickableSpan的实现类,并重写onClick方法

private class YURLSpan extends URLSpan {
		public YURLSpan(String url) {
			super(url);
		}
		public void onClick(View widget) {
			String url = getURL();
			Intent intent = new Intent(
					Intent.ACTION_CALL, Uri
							.parse(url));
			startActivity(intent);
		}
		
	}

这里我就直接继承的URLSpan. 如果大家继承ClickableSpan的话, 在构造方法中把url赋给成员变量就可以了.


补充一点, 如果需要设置超链接为无下划线的话, 需要重写ClickableSpan的updateDrawState方法

public void updateDrawState(TextPaint ds) {
			super.updateDrawState(ds);
			ds.setUnderlineText(false);
		}





此方法还适用于自定义超链接启服务或者是跳转Activity..

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics