TextView ClickableSpan onClickListener点击事件冲突
2016-04-08 17:57
471 查看
需求是这样的:
TextView是在一个ListView item里面,TextView的文本需要格式。当有‘@’或者‘网址’时,将它们的文本高亮并且点击时进行跳转,当点击在‘@’或者‘网址’之外的地方时,要响应LivtView的item click事件。TextView的高亮是使用ClickableSpan实现的。
前提:
LivtView的item click事件我是通过item布局的最外层ViewGroup设置OnClickListener事件实现的。
TextView 是宽度是wrap_content。
存在的问题:
1、如果同时设置布局 item ViewGroup 和 TextView 的OnClickListener事件时,当点击TextView 文本高亮的地方时,会同时响应TextView 和ViewGroup 的点击事件。
2、如果单一设置ViewGroup 的OnClickListener事件时,当点击TextView 文本高亮能正确响应点击事件,但是当点击TextView 文本高亮的之外的地方(未高亮的文本),不响应ViewGroup点击事件。
解决办法:
TextView使用ClickableSpan 实现高亮时,需要使用到LinkMovementMethod
那么,我们需要自定义一个LinkMovementMethod:
最后记得给ViewGroup设置OnClickListener事件。
TextView是在一个ListView item里面,TextView的文本需要格式。当有‘@’或者‘网址’时,将它们的文本高亮并且点击时进行跳转,当点击在‘@’或者‘网址’之外的地方时,要响应LivtView的item click事件。TextView的高亮是使用ClickableSpan实现的。
前提:
LivtView的item click事件我是通过item布局的最外层ViewGroup设置OnClickListener事件实现的。
TextView 是宽度是wrap_content。
存在的问题:
1、如果同时设置布局 item ViewGroup 和 TextView 的OnClickListener事件时,当点击TextView 文本高亮的地方时,会同时响应TextView 和ViewGroup 的点击事件。
2、如果单一设置ViewGroup 的OnClickListener事件时,当点击TextView 文本高亮能正确响应点击事件,但是当点击TextView 文本高亮的之外的地方(未高亮的文本),不响应ViewGroup点击事件。
解决办法:
TextView使用ClickableSpan 实现高亮时,需要使用到LinkMovementMethod
textView.setMovementMethod(LinkMovementMethod.getInstance());
那么,我们需要自定义一个LinkMovementMethod:
public class CustomLinkMovementMethod extends LinkMovementMethod{ @Override public boolean onTouchEvent(TextView widget, Spannable buffer, MotionEvent event) { boolean b = super.onTouchEvent(widget,buffer,event); //解决点击事件冲突问题 if(!b && event.getAction() == MotionEvent.ACTION_UP){ ViewParent parent = widget.getParent();//处理widget的父控件点击事件 if (parent instanceof ViewGroup) { return ((ViewGroup) parent).performClick(); } } return b; } public static CustomLinkMovementMethod getInstance() { if (sInstance == null) sInstance = new CustomLinkMovementMethod(); return sInstance; } private static CustomLinkMovementMethod sInstance; }
最后记得给ViewGroup设置OnClickListener事件。
相关文章推荐
- 完美实现Android ListView中的TextView的跑马灯效果
- android上改变listView的选中颜色
- Delphi7中Listview的常用功能汇总
- Delphi控件ListView的属性及使用方法详解
- android中ListView数据刷新时的同步方法
- Android的TextView与Html相结合的具体方法
- Android提高之ListView实现自适应表格的方法
- Android中实现为TextView添加多个可点击的文本
- Android中实现水平滑动(横向滑动)ListView示例
- C#实现ListView选中项向上或向下移动的方法
- Listview加载的性能优化是如何实现的
- C#实现listview Group收缩扩展的方法
- C# listview添加combobox到单元格的实现代码
- ListView 百分比进度条(delphi版)
- Android listview多视图嵌套多视图
- android textview 显示html方法解析
- ListView Adapter优化 实例
- Android用ListView显示SDCard文件列表的小例子
- Adapter实现ListView带多选框等状态的自定义控件的注意事项
- Android开发技巧之在a标签或TextView控件中单击链接弹出Activity(自定义动作)