【转】edittext设置点击链接
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;
}
}
【转】edittext设置点击链接的更多相关文章
- 让超链接点击后不跳转,可以用href = "#",但是这个#就会锚点到页面最上边 点击链接后不跳转可以设置成
让超链接点击后不跳转,可以用href = "#",但是这个#就会锚点到页面最上边 点击链接后不跳转可以设置成 1.<a href="javascri ...
- EditText设置可以点击,但是不可以编辑
EditText设置 editText.setEnabled(false);后不可编辑也不可点击 设置 setFocusable(false)后不可编辑,但是再设置 setFocusable(tr ...
- 怎么用js设置a标签点击链接改变当前颜色
怎么用js设置a标签点击链接改变当前颜色 20 例如:多个a标签为白色,当点击其中一个a标签时改变那一个a标签的字体颜色为黄色,并且跳转到对应链接,当点击下一个a标签链接时,下一个为黄色,之前一个恢复 ...
- HTML a标签链接 设置点击下载文件
通常情况下,为文件添加链接后,用户可以通过点击链接,直接将文件下载到本地,如下载 excel 表格等 <a href="/user/test/xxxx.excel">点 ...
- c# webbrowser 随机点击链接
HtmlElementCollection hec = webBrowser1.Document.All; ; i < hec.Count; i++) { if (hec[i].GetAttri ...
- ASP.Net Web 点击链接直接下载 不在浏览器打开
目标是:用户点击链接直接弹出下载框,不在浏览器打开文件. 一般网站下载的功能,本以为直接把虚拟路径赋值给链接就行了,没想到测试的时候发现图片,文本和PDF格式的文件都自动在Firefox里面打开了,没 ...
- SEO -- WordPress怎设置百度站长链接自动提交
百度站长平站更新了主动推送(实时)推送的方式,受到了广大站长的好评,但是对于使用WordPress的网站来说怎么设置自动提交呢,在这里介绍一种比较简单且有效的方法.我们可以使用 WP BaiDu Su ...
- 055——VUE中vue-router之路由参数的随意设置与伪静态链接地址处理:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- ASP.NET MVC WebApi 返回数据类型序列化控制(json,xml) 用javascript在客户端删除某一个cookie键值对 input点击链接另一个页面,各种操作。 C# 往线程里传参数的方法总结 TCP/IP 协议 用C#+Selenium+ChromeDriver 生成我的咕咚跑步路线地图 (转)值得学习百度开源70+项目
ASP.NET MVC WebApi 返回数据类型序列化控制(json,xml) 我们都知道在使用WebApi的时候Controller会自动将Action的返回值自动进行各种序列化处理(序列化为 ...
随机推荐
- java操作xml的一个小例子
最近两天公司事比较多,这两天自己主要跟xml打交道,今天更一下用java操作xml的一个小例子. 原来自己操作xml一直用这个包:xstream-1.4.2.jar.然后用注解的方式,很方便,自己只要 ...
- JavaScript引用类型(二)
Date类型 Javascript中的Date类型是采用Java中的java.util.Date类基础上构建的,使用UTC时间来保存数据,可以精确到1970年1月1日之前或之后的285616年 创建一 ...
- VLAN系列
Write From Yangwj Sunday, March 9, 2014 一. Vlan的识别 1. 交换机端口是访问端口,它就属于某一个Vlan:如果是中继端口,它就可以属于所有Vlan. 2 ...
- Oracle数据库对象_同义词
同义词是一种数据库对象,它是为一个数据库对象定义的别名,使用同义词的主要目的是为了简化SQL语句的书写. 同义词的概念和类型 利用同义词可以为用户的一个对象,或者其他用户的一个对象定义别名,从而简化命 ...
- 追访现代主流程序员的家庭事业观---禅宗派程序员KUROKY
Kuroky,一个被人遗忘的当代主流程序员. 在他的内心深处有着怎样的心路历程 他的快乐与悲伤,都是一个禅 独家专访kuroky: 记者:作为现代主流程序员,你内心的苦楚玉欢乐通过什么来发现? 大师: ...
- 20150414---ListView简介(web)
ListView,自带分页功能,而且用户自定义界面样式自由度高. 如下图,都是使用Listview完成的,(测试数据,内容较乱) 所在位置:工具--数据-ListView 这里是配置ListView样 ...
- 精简DropDownList用法
ViewBag.TypeID = new SelectList(db.TType, "ID", "Name", model.TypeID); @Html.Dro ...
- git 终端常输入命令
cd 输入命令 ls 返回目录 git add . 相当于保存代码 git commit -m "" 相当于提交 get pull把服务器上代码拉回本地代码. get pust 刷 ...
- php 去除数组中重复元素
去除数组中重复元素, 找了下可以一下两个函数 php array_flip()与array_uniqure() $arr = array(…………) ;// 假设有数组包含一万个元素,里面有重复的元素 ...
- HMTL5的 video 在IOS7中碰到的坑
直接说问题吧, 测试设备,ipod 我们在移动端播放视频的时候,一般使用H5的video标签,OK,这里有几点差异(就我目前所发现的)给大家分享一下, 1.在IOS7中,video元素是需要确定大小的 ...