android屏蔽长按 网址的Textview跳转访问网页

来源:互联网 发布:欢呼吧赛事数据 编辑:程序博客网 时间:2024/05/21 22:51

  比如我们的Textview里面的内容是网址 http;//www.baidu.com,然后我们设置了textview的属性android:autoLink="web",这样之后,我们点击textview系统会自动打开浏览器,

然后有个需求是长按textview弹出对话框。然后我就写长按监听事件

textview.setOnLongClickListener(new View.OnLongClickListener() {


@Override
public boolean onLongClick(View v) {
//TODO 弹出对话框
return false;
}
});


这样之写之后,长按textview你会发现系统会弹出对话框,然后也会自动打开连接浏览器,好像2个不会冲突的样子。

1、这个时候是tv自己定义了onclicklistener事件,我就把setOnLongClickListener里面的返回值改为true,让用户长按之后,不要触发tv的单机事件,但是这样并没有效果,还是会弹出对话框,并且跳转打开浏览器访问百度。

2、后面问别人说可以用clickablespan,我试了下,发现这个是对html标记的去获取的,加入一段对话中用链接,好像并没有效果,没有html标记获取不到网址,也可能是自己没有研究透彻,这种方法放弃了,后面还想截取字符串中的url来着

3、后来,我操作的时候,当我长按不放手textview的时候,发现就弹出对话框来了,没有跳转到网页,当我松手的时候才跳转打开网页的,由于第一点不是onClicklistener触发打卡的,我就猜想事件传递是,setOnTouchListener的down事件---》OnLongClickListener--》setOnTouchListener的up事件--》在是打开网页的事件,如果在up的时候返回true,不让事件传递会不会不打开浏览器呢,

代码如下

boolean upReturn =true;

textview.setOnLongClickListener(new View.OnLongClickListener() {


@Override
public boolean onLongClick(View v) {
//TODO 打开浏览器
upReturn = true;
return false;
}
});

textview.setOnTouchListener(new OnTouchListener() {

@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction()==MotionEvent.ACTION_UP) {
return upReturn;
}else if (event.getAction()==MotionEvent.ACTION_DOWN) {
upReturn = false;
}
return false;
}
});


好了,到这里发现问题解决了,单击网址的时候可以跳转打开浏览器访问网络;长按网址不会打开浏览器,仅仅是弹出对话框



0 0