Android中捕获TTextView文本中的链接点击事件方法

Android中的TTextView很强大,我们可以不仅可以设置纯文本为其内容,还可以设置包含网址和电子邮件地址的内容,并且使得这些点击可以点击。但是我们可以捕获并控制这些链接的点击事件么,当然是可以的。

本文将一个超级简单的例子介绍一下如何实现在Android TextView 捕获链接的点击事件。

关键实现

实现原理就是将所有的URL设置成ClickSpan,然后在它的onClick事件中加入你想要的控制逻辑就可以了。

代码如下:

private void setLinkClickable(final SpannableStringBuilder clickableHtmlBuilder,
      final URLSpan urlSpan) {
    int start = clickableHtmlBuilder.getSpanStart(urlSpan);
    int end = clickableHtmlBuilder.getSpanEnd(urlSpan);
    int flags = clickableHtmlBuilder.getSpanFlags(urlSpan);
    ClickableSpan clickableSpan = new ClickableSpan() {
          public void onClick(View view) {
            //Do something with URL here.
         
          }
    };
    clickableHtmlBuilder.setSpan(clickableSpan, start, end, flags);
}

private CharSequence getClickableHtml(String html) {
    Spanned spannedHtml = Html.fromHtml(html);
    SpannableStringBuilder clickableHtmlBuilder = new SpannableStringBuilder(spannedHtml);
    URLSpan[] urls = clickableHtmlBuilder.getSpans(0, spannedHtml.length(), URLSpan.class);
    for(final URLSpan span : urls) {
      setLinkClickable(clickableHtmlBuilder, span);
    }
    return clickableHtmlBuilder;
}

如何使用

代码如下:

TextView myTextView = (TextView)findViewById(R.id.myTextView);
  String url = "This is a page with lots of URLs. <a href=\"http://jb51.net\">jb51.net</> " +
          "This left is a very good blog. There are so many great blogs there. You can find what" +
          "you want in that blog."
          + "The Next Link is <a href=\"http://www.google.com.hk\">Google HK</a>";
  myTextView.setText(getClickableHtml(url));

实现自己的控制

我们需要在ClickSpan的onClick方法中加入自己的控制逻辑,比如我们使用傲游浏览器打开点击的链接。

代码如下:

public void onClick(View view) {
  Log.i(LOGTAG, "onClick url=" + urlSpan.getURL() );
    Intent intent = new Intent(Intent.ACTION_VIEW);
  intent.setData(Uri.parse(urlSpan.getURL()));
  intent.setPackage("com.mx.browser");
  startActivity(intent);
}

提醒

不要忘了设置TextView的autoLink属性。

代码如下:

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/hello_world"
    android:id="@+id/myTextView"
    android:autoLink="web"
/>

(0)

相关推荐

  • Android开发之自动朗读TTS用法分析

    本文实例讲述了Android自动朗读TTS用法.分享给大家供大家参考,具体如下: TextToSpeech简称 TTS,是自Android 1.6版本开始比较重要的新功能.将所指定的文本转成不同语言音频输出.它可以方便的嵌入到游戏或者应用程序中,增强用户体验. 在讲解TTS API和将这项功能应用到你的实际项目中的方法之前,先对这套TTS引擎有个初步的了解. 对TTS资源的大体了解: TTS engine依托于当前Android Platform所支持的几种主要的语言:English.Frenc

  • android界面布局之实现文本块布局效果示例

    复制代码 代码如下: package cn.aibow.android.layoutdemo1; import android.os.Bundle;import android.app.Activity;import android.view.Menu;import android.view.MotionEvent;import android.view.View;import android.widget.TextView;import android.widget.Toast; public

  • Android开发之文本内容自动朗读功能实现方法

    本文实例讲述了Android开发之文本内容自动朗读功能实现方法.分享给大家供大家参考,具体如下: Android提供了自动朗读支持.自动朗读支持可以对指定文本内容进行朗读,从而发生声音:不仅如此,Android的自动朗读支持还允许把文本对应的音频录制成音频文件,方便以后播放.这种自动朗读支持的英文名称为TextToSpeech,简称TTS. 借助于TTS的支持,可以在应用程序中动态地增加音频输出,从而改善用户体验. Android的自动朗读支持主要通过TextTospeech来完成,该累提供了如

  • android TextView多行文本(超过3行)使用ellipsize属性无效问题的解决方法

    布局文件中的TextView属性 复制代码 代码如下: <TextViewandroid:id="@+id/businesscardsingle_content_abstract"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginTop="5dp"android:lineSpacingMu

  • android 手机SD卡读写操作(以txt文本为例)实现步骤

    1.首先对manifest注册SD卡读写权限 要说明一下,我这里没有用MainActivity.class作为软件入口 复制代码 代码如下: AndroidManifest.xml <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com

  • Android UI实现多行文本折叠展开效果

    上文介绍了单行文本水平触摸滑动效果,通过EditText实现TextView单行长文本水平滑动效果. 本文继续介绍了多行文本折叠展开,自定义布局View实现多行文本折叠和展开 1.概述 经常在APP中能看到有引用文章或大段博文的内容,他们的展示样式也有点儿意思,默认是折叠的,当你点击文章之后它会自动展开.再次点击他又会缩回去. 网上有找到部分效果,感觉不是很满意.最后自己尝试用 自定义布局layout 写了个demo.比较简陋,不过可以用了.有这方面需求的朋友可以稍加改造下.如有更好的创意,也不

  • Android TextView多文本折叠展开效果

    最近做项目,效果图要用到TextView的折叠,超过一定行数的时候,就会折叠起来,点击可以展开.网上找了一些效果,自己也稍作了修改.便拿来与网友分享分享. 参考文献:Android UI实现多行文本折叠展开效果 第一种:通过多个布局组合实现 大概步骤: - 定义布局,垂直的线性LinearLayout布局.TextView和ImageView. 在layout中定义基本组件. - 设置TextView的高度为指定行数*行高. 不使用maxLine的原因是maxLine会控制显示文本的行数,不方便

  • Android应用程序中读写txt文本文件的基本方法讲解

    最终效果图,点击save会保存到文件中,点击show会从文件中读取出内容并显示. main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layou

  • Android中实现为TextView添加多个可点击的文本

    本文实例展示了Android中实现为TextView添加多个可点击的文本的方法.该功能在Android社交软件的制作中非常具有实用价值.分享给大家供大家参考.具体如下: 很多时候我们在使用社交软件的过程中多多少少会为别人的帖子点赞,如下图所示: 可以看到用户页面显示出来的只是点了赞的用户的名称,点击这些名称可以进入到该用户的主页.下面我们就来实现类似的效果. 具体代码如下: @Override protected void onCreate(Bundle savedInstanceState)

  • Android中捕获TTextView文本中的链接点击事件方法

    Android中的TTextView很强大,我们可以不仅可以设置纯文本为其内容,还可以设置包含网址和电子邮件地址的内容,并且使得这些点击可以点击.但是我们可以捕获并控制这些链接的点击事件么,当然是可以的. 本文将一个超级简单的例子介绍一下如何实现在Android TextView 捕获链接的点击事件. 关键实现 实现原理就是将所有的URL设置成ClickSpan,然后在它的onClick事件中加入你想要的控制逻辑就可以了. 复制代码 代码如下: private void setLinkClick

  • 在Vue组件中获取全局的点击事件方法

    使用场景: 在Vue组件中点击某元素之外的地方移除该元素 需求: 如上图所示,"用户列表"页面有三个Vue组件组成,分别是"菜单组件","导航组件"和"列表组件".其中"列表组件"中包含一个"下拉菜单",当我们点击"下拉菜单"以外的区域隐藏下拉菜单. 解决方法一: 出现"下拉菜单"的同时,建一个透明的遮罩层,然后只有"下拉菜单"

  • Android之有效防止按钮多次重复点击的方法(必看篇)

    为了防止测试妹子或者用户频繁点击某个按钮,导致程序在短时间内进行多次数据提交or数据处理,那到时候就比较坑了~ 那么如何有效避免这种情况的发生呢? 我的想法是,判断用户点击按钮间隔时间,如果间隔时间太短,则认为是无效操作,否则进行相关业务处理 首先将这块提取为工具类(方便接下来的调用),现在就起名为:ButtonUtils public class ButtonUtils { private static long lastClickTime = 0; private static long D

  • Android如何基于坐标对View进行模拟点击事件详解

    前言 大家应该都知道,在Android中,我们对于View进行模拟点击事件,很容易,比如调用View.performClick即可. 但是有些时候,我们想要更加精细的点击,比如View的某一区域或者某一点进行点击.比如下面的例子. 上面是一个WebView加载了一个视频,我们必须手动点一下播放按钮才能让视频播放,当然我们想要的最好是如下的自动播放效果(进入界面后,自动播放视频) 当然方法有很多,比如通过javascript调用视频元素的click事件.在这里我们暂不对该方法进行细究.本文旨在提供

  • jquery 触发a链接点击事件解决方案

    jquery 触发a链接点击事件 复制代码 代码如下: <p class="btnSubmit"><a href="javascript:submitData();">确认</a></p> $(".btnSubmit a")[0].click(); <p id="tob"><a href="1.html">这是文字</a>&

  • TextView中URL等指定特殊字符串与点击事件解析

    使用TextView时,有时可能需要给予TextView里的特定字符串,比如URL,数字特别的样式,必希望能够添加点击事件.比如发短信时,文字里的url就可以点击直接打开浏览器,数字可以点击拨打电话. Android提供了SpannableString类来对TextView的内容进行处理,具体步骤: 1.new一个SpannableString对象,传入需要显示在TextView上的内容: 2.对内容进行处理(比如用正则表达式解析出URL或数字等等,并指定样式),这部分的核心就是调用Spanna

  • Android开发在轮播图片上加入点击事件的方法

    这是我加在里面的代码,用Switch(position) 来获取当前图片,在相应的图片上加入点击事件, case  0:, case 1: 时代码如下,当点击第一张图片时,想实现case 0里面的代码,但是直接直接报错,退出,当点击第二张实现case 1中的代码时却是没问题,我想知道到底哪里不对啊. 对了,这些代码是在Fragemnt内写的,点击图片时是要从一个Fragment转到一个Activity,求大神指教

  • 简述Android中实现APP文本内容的分享发送与接收方法

    谨记(指定选择器Intent.createChooser()) 开始今天的内容前,先闲聊一下: (1)突然有一天头脑风暴,对很多问题有了新的看法和见解,迫不及待的想要分享给大家,文档已经写好了,我需要通过微信或者QQ,短信等社交工具发送给大家. (2)在网上发现一段特别好的文章,想要保存收藏下来. 上面描述了进入智能手机时代后,我们经常遇到的两种情况,那么作为开发者的我们如何让自己开发的APP实现这两种功能呢,下面我们以实现文本的发送分享以及接收来梳理下两种功能的实现过程(其他类型的数据在博文末

  • vue.js中关于点击事件方法的使用(click)

    目录 关于点击事件方法的使用(click) vue点击click事件解析 关于点击事件方法的使用(click) 定义vue.js: <script src="../js/vue.min.js"> </script> 也可以使用网上的: <script src="https://cdn.staticfile.org/vue/2.4.2/vue.min.js"></script> 都可以. 定义方法: let vm=new

  • Android 中RecycleView实现item的点击事件

    Android 中RecycleView实现item的点击事件 RecycleView现在已经越来越受到大家的重视,因为他既可以代替listView还可以代替GridView,但是RecycleView本身不不像ListView那样具有setOnItemClickListener,这个关于子item的点击,但是我们往往会用到RecycleView并且希望他的自孩子可以被点击,那么如何实现他的item的点击事件呢? 首先我们在RecyclerView.ViewHolder中的实现: public

随机推荐