Android解决文本链接长按事件与短按事件冲突的demo
![preview](https://csdnimg.cn/release/downloadcmsfe/public/img/white-bg.ca8570fa.png)
![preview-icon](https://csdnimg.cn/release/downloadcmsfe/public/img/scale.ab9e0183.png)
![star](https://csdnimg.cn/release/downloadcmsfe/public/img/star.98a08eaa.png)
在Android开发中,处理文本链接的交互是一个常见的需求。用户可能会点击链接来跳转到其他页面,也可能希望长按链接来触发更多的操作,如复制链接、分享等。然而,系统默认的行为是短按即触发链接的点击事件,这可能会与我们期望的长按事件冲突。本文将深入探讨如何在Android中解决这种冲突,实现长按事件和短按事件的分离。 我们需要了解Android中的`TextView`或`WebView`是如何处理文本链接的。通常,`TextView`通过`android:autoLink`属性自动识别并链接化URL,而`WebView`则通过`loadData()`或`loadUrl()`加载HTML内容来展示链接。默认情况下,这两种控件都支持点击链接进行网页跳转。 要解决短按与长按事件的冲突,我们可以自定义一个`TextView`的子类,重写`onTouchEvent()`方法。在这个方法里,我们将添加对长按和短按事件的判断逻辑: ```java public class LinkTextView extends TextView { private GestureDetector gestureDetector; public LinkTextView(Context context) { super(context); init(); } public LinkTextView(Context context, AttributeSet attrs) { super(context, attrs); init(); } public LinkTextView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(); } private void init() { gestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() { @Override public void onLongPress(MotionEvent e) { // 长按事件处理 for (LinkSpan span : getLinks()) { if (isTouchInSpan(e.getX(), e.getY(), span)) { // 在这里执行你的长按动作,比如弹出菜单、复制链接等 break; } } } @Override public boolean onSingleTapUp(MotionEvent e) { // 短按事件处理 return false; // 不消费短按事件,让父类处理 } }); } private List<LinkSpan> getLinks() { SpannableString ss = (SpannableString) getText(); return ss.getSpans(0, ss.length(), LinkSpan.class); } private boolean isTouchInSpan(float x, float y, LinkSpan span) { int start = getOffsetForPosition(x, y); int end = getLayout().getOffsetForHorizontal(getLineForVertical(y), x); return start >= span.getStart() && end <= span.getEnd(); } @Override public boolean onTouchEvent(MotionEvent event) { return gestureDetector.onTouchEvent(event); } } ``` 在这个自定义的`LinkTextView`中,我们使用了`GestureDetector`来监听用户的触摸事件。当检测到长按时,我们遍历所有链接,判断触摸点是否在链接范围内,然后执行相应的长按操作。短按事件我们不作处理,让它由`TextView`的父类继续处理,这样就不会触发链接的点击事件。 为了使`TextView`显示链接并支持自定义的长按事件,我们需要创建一个`LinkSpan`类,继承自`ClickableSpan`,并在`onLongClick()`方法中实现长按事件的回调: ```java public class CustomLinkSpan extends ClickableSpan { private String url; public CustomLinkSpan(String url) { this.url = url; } @Override public void onClick(View widget) { // 这里可以不做处理,因为我们在LinkTextView中已经处理了短按事件 } @Override public void onLongClick(View widget) { // 在这里实现长按链接的动作 } } ``` 在设置`TextView`的文本时,我们应用`CustomLinkSpan`到链接文本上: ```java String text = "这是一个链接:http://example.com"; SpannableString ss = new SpannableString(text); ss.setSpan(new CustomLinkSpan("http://example.com"), 7, text.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); linkTextView.setText(ss); linkTextView.setMovementMethod(LinkMovementMethod.getInstance()); ``` 通过以上方式,我们成功地在Android应用中实现了文本链接的长按事件与短按事件的分离,确保用户可以在不触发短按行为的情况下执行长按操作。这种方法既保留了链接的默认外观,又允许我们自定义长按事件,从而提供更好的用户体验。
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![docx](https://img-home.csdnimg.cn/images/20241231044901.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![7z](https://img-home.csdnimg.cn/images/20241231044736.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![package](https://csdnimg.cn/release/downloadcmsfe/public/img/package.f3fc750b.png)
![folder](https://csdnimg.cn/release/downloadcmsfe/public/img/folder.005fa2e5.png)
![folder](https://csdnimg.cn/release/downloadcmsfe/public/img/folder.005fa2e5.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![folder](https://csdnimg.cn/release/downloadcmsfe/public/img/folder.005fa2e5.png)
![folder](https://csdnimg.cn/release/downloadcmsfe/public/img/folder.005fa2e5.png)
![folder](https://csdnimg.cn/release/downloadcmsfe/public/img/folder.005fa2e5.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/PNG.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/PNG.png)
![folder](https://csdnimg.cn/release/downloadcmsfe/public/img/folder.005fa2e5.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/PNG.png)
![folder](https://csdnimg.cn/release/downloadcmsfe/public/img/folder.005fa2e5.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/PNG.png)
![folder](https://csdnimg.cn/release/downloadcmsfe/public/img/folder.005fa2e5.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/PNG.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![folder](https://csdnimg.cn/release/downloadcmsfe/public/img/folder.005fa2e5.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/JAR.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/JAR.png)
![folder](https://csdnimg.cn/release/downloadcmsfe/public/img/folder.005fa2e5.png)
![folder](https://csdnimg.cn/release/downloadcmsfe/public/img/folder.005fa2e5.png)
![folder](https://csdnimg.cn/release/downloadcmsfe/public/img/folder.005fa2e5.png)
![folder](https://csdnimg.cn/release/downloadcmsfe/public/img/folder.005fa2e5.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![folder](https://csdnimg.cn/release/downloadcmsfe/public/img/folder.005fa2e5.png)
![folder](https://csdnimg.cn/release/downloadcmsfe/public/img/folder.005fa2e5.png)
![folder](https://csdnimg.cn/release/downloadcmsfe/public/img/folder.005fa2e5.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![folder](https://csdnimg.cn/release/downloadcmsfe/public/img/folder.005fa2e5.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![folder](https://csdnimg.cn/release/downloadcmsfe/public/img/folder.005fa2e5.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![folder](https://csdnimg.cn/release/downloadcmsfe/public/img/folder.005fa2e5.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/PNG.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/PNG.png)
![folder](https://csdnimg.cn/release/downloadcmsfe/public/img/folder.005fa2e5.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/PNG.png)
![folder](https://csdnimg.cn/release/downloadcmsfe/public/img/folder.005fa2e5.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/PNG.png)
![folder](https://csdnimg.cn/release/downloadcmsfe/public/img/folder.005fa2e5.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![folder](https://csdnimg.cn/release/downloadcmsfe/public/img/folder.005fa2e5.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![folder](https://csdnimg.cn/release/downloadcmsfe/public/img/folder.005fa2e5.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/PNG.png)
![folder](https://csdnimg.cn/release/downloadcmsfe/public/img/folder.005fa2e5.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![folder](https://csdnimg.cn/release/downloadcmsfe/public/img/folder.005fa2e5.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/TXT.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/PNG.png)
![folder](https://csdnimg.cn/release/downloadcmsfe/public/img/folder.005fa2e5.png)
![folder](https://csdnimg.cn/release/downloadcmsfe/public/img/folder.005fa2e5.png)
![folder](https://csdnimg.cn/release/downloadcmsfe/public/img/folder.005fa2e5.png)
![folder](https://csdnimg.cn/release/downloadcmsfe/public/img/folder.005fa2e5.png)
![folder](https://csdnimg.cn/release/downloadcmsfe/public/img/folder.005fa2e5.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![folder](https://csdnimg.cn/release/downloadcmsfe/public/img/folder.005fa2e5.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![folder](https://csdnimg.cn/release/downloadcmsfe/public/img/folder.005fa2e5.png)
![folder](https://csdnimg.cn/release/downloadcmsfe/public/img/folder.005fa2e5.png)
![folder](https://csdnimg.cn/release/downloadcmsfe/public/img/folder.005fa2e5.png)
![folder](https://csdnimg.cn/release/downloadcmsfe/public/img/folder.005fa2e5.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![folder](https://csdnimg.cn/release/downloadcmsfe/public/img/folder.005fa2e5.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/JAR.png)
- 1
![avatar-default](https://csdnimg.cn/release/downloadcmsfe/public/img/lazyLogo2.1882d7f4.png)
- lyle_peng2017-06-20挺不错的资源
- AndroidDaily2015-08-31长按事件崩溃
![avatar](https://profile-avatar.csdnimg.cn/dfdd0aa1dc644958a98009f4f01b07b6_u012205719.jpg!1)
- 粉丝: 4
- 资源: 4
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助
![voice](https://csdnimg.cn/release/downloadcmsfe/public/img/voice.245cc511.png)
![center-task](https://csdnimg.cn/release/downloadcmsfe/public/img/center-task.c2eda91a.png)
最新资源
- 【创新发文】秃鹰算法BES-DELM预测(多输入单输出)【含Matlab源码 6953期】.zip
- 【创新发文】向量加权平均算法INFO-DELM预测(多输入单输出)【含Matlab源码 6955期】.zip
- 【创新发文】向量加权平均算法INFO-DELM预测(多输入单输出)【含Matlab源码 6955期】.zip
- 【创新发文】星雀算法NOA-DELM预测(多输入单输出)【含Matlab源码 6956期】.zip
- 【创新发文】星雀算法NOA-DELM预测(多输入单输出)【含Matlab源码 6956期】.zip
- 【创新发文】雪融算法SAO-DELM预测(多输入单输出)【含Matlab源码 6957期】.zip
- 【创新发文】雪融算法SAO-DELM预测(多输入单输出)【含Matlab源码 6957期】.zip
- 【创新发文】天鹰算法AO-DELM预测(多输入单输出)【含Matlab源码 6952期】.zip
- 【创新发文】天鹰算法AO-DELM预测(多输入单输出)【含Matlab源码 6952期】.zip
- 【创新发文】雾凇算法RIME-DELM预测(多输入单输出)【含Matlab源码 6954期】.zip
- 【创新发文】雾凇算法RIME-DELM预测(多输入单输出)【含Matlab源码 6954期】.zip
- 【创新发文】遗传算法GA-DELM预测(多输入单输出)【含Matlab源码 6958期】.zip
- 【创新发文】遗传算法GA-DELM预测(多输入单输出)【含Matlab源码 6958期】.zip
- 【创新发文】蚁狮算法ALO-DELM预测(多输入单输出)【含Matlab源码 6959期】.zip
- 【创新发文】蚁狮算法ALO-DELM预测(多输入单输出)【含Matlab源码 6959期】.zip
- 【创新发文】引力搜索算法GSA-DELM预测(多输入单输出)【含Matlab源码 6960期】.zip
![feedback](https://img-home.csdnimg.cn/images/20220527035711.png)
![feedback-tip](https://img-home.csdnimg.cn/images/20220527035111.png)
![dialog-icon](https://csdnimg.cn/release/downloadcmsfe/public/img/green-success.6a4acb44.png)