文档章节

【转】edittext设置点击链接

zaaack
 zaaack
发布于 2014/10/14 23:37
字数 275
阅读 15
收藏 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
85
0
Android软件开发之TextView详解(六)

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

晨曦之光
2012/03/07
652
0
简单——拨打电话项目

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

抹耳
2017/11/15
0
0
Android软键盘的一些控制

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

晨曦之光
2012/03/05
645
0
Android开发:跳转界面时出现错误

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

黄涛11
2012/04/07
2.2K
1

没有更多内容

加载失败,请刷新页面

加载更多

ViewPager系列之软件主页面切换制作

效果图:ViewPager制作的页面能左右滑动,而Fragment制作的页面却不能左右滑动。 代码: <?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.......

鱼想吃肉
13分钟前
1
0
大话后端开发的奇淫技巧大集合

Hi,大家好,很荣幸有这个机会可以通过写博文的方式,把这些年在后端开发过程中总结沉淀下来的经验和设计思路分享出来 模块化设计 根据业务场景,将业务抽离成独立模块,对外通过接口提供服务...

James-
14分钟前
0
0
函数

1、函数的定义:从function关键字开始,后面跟随{ (1)函数名字 (2)圆括号 (3)花括号 } function arr() {}

墨冥
14分钟前
0
0
ZABBIX 3.4 (一) 监测Nginx状态及脚本

ZABBIX 3.4 (一) 监测Nginx状态及脚本 2018年08月31日 16:56:48 YoFog 阅读数:106 标签: zabbix agentzabbix nginxnginx_status监控nginxzabbix脚本更多 个人分类: 运维 版权声明:本文...

linjin200
16分钟前
1
0
Spring 之 IOC 初始化总结

IOC 容器的初始化过程分为三步骤: Resource 定位 BeanDefinition 的载入和解析 BeanDefinition 注册 Resource 定位。我们一般用外部资源来描述 Bean 对象,所以在初始化 IOC 容器的第一步就...

专业搬砖工程师
18分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部