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"
/>

时间: 2024-08-02 09:47:13

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

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

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

listview-ListView的Item中的webView控件与Item点击事件冲突?

问题描述 ListView的Item中的webView控件与Item点击事件冲突? 各位大神大侠们好! 我编写了一个自定义item的ListView,自定义的ListView Item里有两个控件,一个是checkBox, 另一个是webView. 一开始ListView的点击事件完全没反应,在网上搜索了答案解决了,checkBox与ListView 点击冲突,点击checkBox区域可以响应ListView的点击事件.但是点击webView 区域不能响应ListView的点击事件. 以下是我I

android-listview 中item怎么控制子view的点击事件

问题描述 listview 中item怎么控制子view的点击事件 怎么让点击c那一行时没响应,应该怎样处理touch事件 解决方案 有借口,复写就好了,不过要注意焦点问题.那才是烦人的 解决方案二: 解决方案三: 判断处理就行了... 解决方案四: 可以根据内容来判断一下试试. 解决方案五: 这个不是expandedlistvie吗? 解决方案六: BaseAdapter 里面有下标参数 postion 解决方案七: 有个监听,重写下就好了.position用来控制点的是那个item.

ios中怎样添加scrollview上button的点击事件

问题描述 ios中怎样添加scrollview上button的点击事件 在scrollview上面,自定义的button?点击没有反应 解决方案 怎么可能呢,有绑定事件处理函数吧 解决方案二: addaddTarget action 你确定你的selector实现了? 解决方案三: 使用UITapGestureRecognizer 初始化一个点击动作, 然后使用方法: addGestureRecognizer:(UIGestureRecognizer *)gestureRecognizer添加

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

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

Android绑定添加了注解的控件,及其事件方法

  Android绑定添加了注解的控件,及其事件方法.根据成员方法的注解进行绑定,根据成员变量的注解进行绑定,设置事件的监听器,对控件赋值,注意:它必须在activity调用了setContentView之后调用.

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

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

WPS文字中多个文本框相互链接的攻略

  相信大家再编辑文档的时候,经常用到文本框来防止文字或图片的移动,但是也有的时候,要将文字或图片两个文本框相接连起来.下面小编就为大家分享下文本框链接的操作技巧,一起来看看吧. 一.绘制文本框 先在文档中要插入文本框的位置单击鼠标,然后在菜单栏中单击"插入--文本框(横或竖文本框)",也可以直接在绘图工具栏中单击"文本框"按钮(如图01),然后拖动鼠标,即可绘制出所需的文本框. 图1文本框 二.调整文本框位置 我们可以根据需要对文本框位置及大小进行适当调整,首先是

在winform中捕获上下左右键等控制键的按键事件

最近一直在做表单设计器,今天有一个需求就是:通过上下左右键来控制表单上的控件移动.但是控件的KeyDown捕获不到上下左右键,KeyUp事件倒是可以捕获到,但你通过上下左右键移动控件位置,不能点一下才移动一下啊,太不人性了.上网找了半天发现了这么一个方法: 重写Control的ProcessDialogKey方法,此处以winform表单为例: protected override bool ProcessDialogKey(Keys keyData) { Control control = t