文档章节

【转】edittext设置点击链接

zaaack
 zaaack
发布于 2014/10/14 23:37
字数 275
阅读 13
收藏 0
点赞 0
评论 0

I put some ClickableSpan in EditText, unfortunately, that spans are still not clickable. When I click them, the only thing happened when I tap the clickablespan is the text cursor(selection, position, whatever you call it is) been set to that position.

After some search, I find out: I have to do this to make the span clickable?

setMovementMethod(LinkMovementMethod.getInstance());

After this, I do can click the ClickableSpan, but a new problem appear:

 

I can't do cursor selecting anymore, the cursor disappeared!

After a lot of searching and analyzing, I decide to make my own MovementMethod, which support both cursor selecting and span clicking. It's easy, the onTouchEvent() method is copied from android 1.5-r4 source code.

Here it goes:

 

Java语言: <ue_a href="http://fayaa.com/code/">高亮代码由发芽网提供

 

package my.handrite.text.method;

import android.text.Layout;
import android.text.Selection;
import android.text.Spannable;
import android.text.method.ArrowKeyMovementMethod;
import android.text.method.MovementMethod;
import android.text.style.ClickableSpan;
import android.view.MotionEvent;
import android.widget.TextView;

public class LinkArrowKeyMovementMethod extends ArrowKeyMovementMethod {
private static LinkArrowKeyMovementMethod mInstance;

@Override
public boolean onTouchEvent(TextView widget, Spannable buffer, MotionEvent event){
int action = event.getAction();

       if (action == MotionEvent.ACTION_UP ||
           action == MotionEvent.ACTION_DOWN) {
           int x = (int) event.getX();
           int y = (int) event.getY();

           x -= widget.getTotalPaddingLeft();
           y -= widget.getTotalPaddingTop();

           x += widget.getScrollX();
           y += widget.getScrollY();

           Layout layout = widget.getLayout();
           int line = layout.getLineForVertical(y);
           int off = layout.getOffsetForHorizontal(line, x);

           ClickableSpan[] link = buffer.getSpans(off, off, ClickableSpan.class);

           if (link.length != 0) {
               if (action == MotionEvent.ACTION_UP) {
                   link[0].onClick(widget);
               } else if (action == MotionEvent.ACTION_DOWN) {
                   Selection.setSelection(buffer,
                                          buffer.getSpanStart(link[0]),
                                          buffer.getSpanEnd(link[0]));
               }

               return true;
           } else {
               Selection.removeSelection(buffer);
           }
       }

       return super.onTouchEvent(widget, buffer, event);
}
@Override
public String toString(){
return "my.handrite.text.method.ClickableArrowKeyMovementMethod";
}
   public static MovementMethod getInstance() {
       if (mInstance == null)
           mInstance = new LinkArrowKeyMovementMethod();

       return mInstance;
   }
}

 

本文转载自:

共有 人打赏支持
zaaack

zaaack

粉丝 34
博文 91
码字总数 43011
作品 7
长沙
程序员
Android软件开发之TextView详解(六)

Android软件开发之TextView详解 雨松MOMO原创文章如转载,请注明:转载自雨松MOMO的博客原文地址:http://blog.csdn.net/xys289187120/article/details/6625662 TextView的API 中文文档中 说明...

彭博 ⋅ 2012/03/09 ⋅ 0

Android软件开发之TextView详解(六)

Android软件开发之TextView详解 雨松MOMO原创文章如转载,请注明:转载自雨松MOMO的博客原文地址:http://blog.csdn.net/xys289187120/article/details/6625662 TextView的API 中文文档中 说明...

晨曦之光 ⋅ 2012/03/07 ⋅ 0

简单——拨打电话项目

1.设置UI界面 2.根据UI写业务逻辑在mainActivity里面在OnCreate方法里面写 3.给按钮设置一个点击事件SetOnClicklistener 4.自己定义一个类去实现方法所需要的参数类型 5.给拨打电话加上权限 ...

抹耳 ⋅ 2017/11/15 ⋅ 0

Android软键盘的一些控制

"EditText + Button" 形成一个 "输入+按键响应" 的案例在android编程中是最常见不过的了。 但还有一些细节需要注意: 在EditText输入后,点击Button进行请求,软键盘应该自行消失 在EditTex...

晨曦之光 ⋅ 2012/03/05 ⋅ 0

Android的UI组件

今天主要讲解Android的两个组件,TextView和EditText。这两个组件非常常见,从第一天的HelloWord就开始接触这两个组件,这两个组件极其常用,但是功能又是非常强大的。有些功能在平时遇见可能...

晨曦之光 ⋅ 2012/05/16 ⋅ 0

Android开发:跳转界面时出现错误

你好,我是刚学Android开发的,做程序多数是参考书本,所以可能有些隐藏的内容没留意,或者说是不懂,我昨天搞了个Android跳转窗体的程序,但是老是那个错误:The application 填写用户信息(...

黄涛11 ⋅ 2012/04/07 ⋅ 1

Android软件开发之EditText 详解(八)

Android软件开发之EditText 详解 雨松MOMO原创文章如转载,请注明:转载自雨松MOMO的博客原文地址:http://blog.csdn.net/xys289187120/article/details/6629450 EditText在API中的结构 java...

晨曦之光 ⋅ 2012/03/07 ⋅ 0

Android软件开发之EditText 详解(八)

Android软件开发之EditText 详解 雨松MOMO原创文章如转载,请注明:转载自雨松MOMO的博客原文地址:http://blog.csdn.net/xys289187120/article/details/6629450 EditText在API中的结构 java...

彭博 ⋅ 2012/03/09 ⋅ 0

TextView的API 中文文档

1.1 结构 java .lang.Object ↳ android.view.View ↳ android.widget.TextView 直接子类: Button, CheckedTextView, Chronometer, DigitalClock, EditText 间接子类: AutoCompleteTextVi......

JavaGG ⋅ 2011/06/30 ⋅ 3

使用TextView/EditText应该注意的地方【转】

EditText小记 http://www.cnblogs.com/endure/p/3690443.html Android字体阴影 strings.xml文件定义字符串中的标签 Android TextView 自动换行问题 关于android软键盘enter键的替换与事件监听...

球球 ⋅ 2016/05/20 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Java NIO之字符集

1 字符集和编解码的概念 首先,解释一下什么是字符集。顾名思义,就是字符的集合。它的初衷是把现实世界的符号映射为计算机可以理解的字节。比如我创造一个字符集,叫做sex字符集,就包含两个...

士别三日 ⋅ 38分钟前 ⋅ 0

Spring Bean基础

1、Bean之间引用 <!--如果Bean配置在同一个XML文件中,使用local引用--><ref bean="someBean"/><!--如果Bean配置在不同的XML文件中,使用ref引用--><ref local="someBean"/> 其实两种......

霍淇滨 ⋅ 43分钟前 ⋅ 0

05、基于Consul+Upsync+Nginx实现动态负载均衡

1、Consul环境搭建 下载consul_0.7.5_linux_amd64.zip到/usr/local/src目录 cd /usr/local/srcwget https://releases.hashicorp.com/consul/0.7.5/consul_0.7.5_linux_amd64.zip 解压consu......

北岩 ⋅ 46分钟前 ⋅ 0

Webpack 4 api 了解与使用

webpack 最近升级到了 v4.5+版 01 官方不再支持 node4 以下版本 官方不再支持 node4 以下版本官方不再支持 node4 以下的版本,所以如果你的node版本太低,先开始升级node吧!话说node10 ...

NDweb ⋅ 56分钟前 ⋅ 0

使用nodeJs安装Vue-cli

Vue脚手架就是一个Vue框架开发环境 脚手架的意思是帮你快速开始一个vue的项目,也就是给你一套vue的结构,包含基础的依赖库,只需要 npm install就可以安装,让我们不需要为了编辑或者一些其...

木筏笔歆 ⋅ 今天 ⋅ 0

【微信小程序开发实战】0x00.开发前准备工作

写在开始 本人资深后端码农一枚,近期项目需求,接触到了微信小程序,将学习过程整理成文分享给小伙伴们,由于是边学边整理难免有表述不对的地方,望大家及时指正,感谢。 本人微信号: dream...

dreamans ⋅ 今天 ⋅ 0

linux redis的安装和php7下安装redis扩展

安装redis服务器 (1)下载安装包: $ wget http://download.redis.io/releases/redis-2.8.17.tar.gz (2)编译程序: $ tar xzf redis-2.8.17.tar.gz $ cd redis-2.8.17 $ make $ cd src &&......

concat ⋅ 今天 ⋅ 0

Guava EventBus源码解析

一、EventBus使用场景示例 Guava EventBus是事件发布/订阅框架,采用观察者模式,通过解耦发布者和订阅者简化事件(消息)的传递。这有点像简化版的MQ,除去了Broker,由EventBus托管了订阅&...

SaintTinyBoy ⋅ 今天 ⋅ 0

http怎么做自动跳转https

Apache 版本 如果需要整站跳转,则在网站的配置文件的<Directory>标签内,键入以下内容: RewriteEngine on RewriteCond %{SERVER_PORT} !^443$ RewriteRule ^(.*)?$ https://%{SERVER_NAME......

Helios51 ⋅ 今天 ⋅ 0

Python爬虫,抓取淘宝商品评论内容

作为一个资深吃货,网购各种零食是很频繁的,但是能否在浩瀚的商品库中找到合适的东西,就只能参考评论了!今天给大家分享用python做个抓取淘宝商品评论的小爬虫! 思路 我们就拿“德州扒鸡”...

python玩家 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部