android中实现文字的超链接的应用内跳转
来源:互联网 发布:王权富贵东方月初乐乎 编辑:程序博客网 时间:2024/06/06 12:29
实现像新浪微博那样的文字中有蓝色超链接,点击后跳转到应用里面的指定页面。
首先自定义一个touchListerner:
/** * Created by App-Dev on 2015/10/20. * 识别超链接的touchListener */public class FindUrlTouchListener implements View.OnTouchListener { @Override public boolean onTouch(View v, MotionEvent event) { boolean ret = false; TextView textView = (TextView) v; CharSequence text = textView.getText(); Spannable sText = Spannable.Factory.getInstance().newSpannable(text); int action = event.getAction(); //超链接的识别 if (action == MotionEvent.ACTION_UP || action == MotionEvent.ACTION_DOWN) { int x = (int) event.getX(); int y = (int) event.getY(); x -= textView.getTotalPaddingLeft(); y -= textView.getTotalPaddingTop(); x += textView.getScrollX(); y += textView.getScrollY(); Layout layout = textView.getLayout(); if (layout != null) { int line = layout.getLineForVertical(y); int off = layout.getOffsetForHorizontal(line, x); ClickableSpan[] link = sText.getSpans(off, off, ClickableSpan.class); if (link.length != 0) { //添加按压后的背景颜色 if (action == MotionEvent.ACTION_DOWN) { Spanned sp = (Spanned) text; int st = sp.getSpanStart(link[0]); int en = sp.getSpanEnd(link[0]); sText.setSpan(new BackgroundColorSpan(v.getResources().getColor(R.color.linkBg)), st, en, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); textView.setText(sText); } if (action == MotionEvent.ACTION_UP) { //清除按压后的背景颜色 BackgroundColorSpan[] bcs = sText.getSpans(off, off, BackgroundColorSpan.class); if (bcs.length != 0) { sText.removeSpan(bcs[0]); textView.setText(sText); } //处理超链接 URLSpan[] urls = sText.getSpans(off, off, URLSpan.class); //获取超链接网址 String url = urls[0].getURL(); if ((url.contains("匹配条件")) { /** * 通过url打开对应的应用页面 */ } else { //超链接为空 if (!TextUtils.isEmpty(url)) { try { link[0].onClick(v); } catch (Exception e) { e.printStackTrace(); } } } } ret = true; } } } //清除按压后的背景颜色 if (action == MotionEvent.ACTION_CANCEL || action == MotionEvent.ACTION_UP) { BackgroundColorSpan[] bcs = sText.getSpans(0, text.length(), BackgroundColorSpan.class); if (bcs.length != 0) { sText.removeSpan(bcs[0]); textView.setText(sText); } } return ret; }}
然后textView设置OnTouchListener:
textView.setOnTouchListener(new FindUrlTouchListener());
最后只需要将包含超链接的文本设置到textView中(注意使用:Html.from(str);):
textView.setText(Html.from(str));
默认情况下textView中的超链接会有下划线。通过下面的方法可以去除:
//去掉链接的下划线 private static void setHtmlStyle(TextView textView) { Spannable s = new Spannable.Factory().newSpannable(textView.getText()); URLSpan[] spans = s.getSpans(0, s.length(), URLSpan.class); for (URLSpan span : spans) { int start = s.getSpanStart(span); int end = s.getSpanEnd(span); s.removeSpan(span); span = new URLSpanNoUnderline(span.getURL()); s.setSpan(span, start, end, 0); } textView.setText(s); } private static class URLSpanNoUnderline extends URLSpan { public URLSpanNoUnderline(String url) { super(url); } @Override public void updateDrawState(TextPaint ds) { super.updateDrawState(ds); ds.setUnderlineText(false); } @Override public void onClick(View widget) { super.onClick(widget); } }
1 0
- android中实现文字的超链接的应用内跳转
- android中文字中间有超链接的实现方法
- UITextView设置超链接,点击跳转到应用内的webView
- Android的webView 实现点击超链接跳转,后退,前进 ,刷新
- android html超链接文本 点击跳转的两种实现
- Android如何通过TextView实现超链接的跳转
- Android如何通过TextView实现超链接的跳转
- android实现超链接的3中方法
- android 同意协议、服务等,一行文字中掺杂关于其他颜色字体。同时实现超链接点击跳转等功能.
- 设置TextView中文字的超链接
- iOS开发中跳转到App Store的应用内
- 图片内的超链接
- Android TextView富文本、超链接和添加文字背景等其他效果的实现
- POI 实现Excel文件中点击超链接跳转到某sheet页某列某行的功能
- POI 实现Excel文件中点击超链接跳转到某sheet页某列某行的功能
- android应用内截图的代码实现
- android应用内截图的代码实现
- android应用内截图的代码实现
- Log4j讲解
- linux添加路由
- 字符串格式化显示
- xml格式数据解析
- 社会化分享在QQ互联后台的URL schema应该怎么设置?
- android中实现文字的超链接的应用内跳转
- HDU2502 月之数(解法三)
- BaaS云架构核心模式之Serverless架构 - 用服务代替服务器(Martin Fowler)
- [leetcode] 363. Max Sum of Rectangle No Larger Than K
- Linux 2.2.0 中select()的主要代码片断——The C10M Problem
- nginx安装
- 时钟dome,css3
- Sql优化方法
- SDKD 2016 Summer Single Contest #01.D