Android TextView中增加超链接的匹配后,导致非超链接区域点击失效的问题解决方案...

android.widget.TextView中可以增加超链接的处理,在增加超链接处理后,加入此TextView是作为ListView中的item的原素出现,有可能会影响ListView本身的一些click事件,此问题的解决方案如下
设置android.widget.TextView的LinkMovementMethod,其中判断是否是处于链接区域,示例代码如下:

 

textView.setMovementMethod(new LinkMovementMethod(){
        		@Override
        	    public boolean onTouchEvent(TextView widget, Spannable buffer,
        	                                MotionEvent event) {
        			isTextClickAreaLink = false;
        			int action = event.getAction();
        			//点击开始的时候,判断用户点击区域是否是链接
        			if (action == MotionEvent.ACTION_UP){
        				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) {
        	                	isTextClickAreaLink = true;
        	                }
        	            }
        			}
        			super.onTouchEvent(widget, buffer, event);
        			return true;
        		}
        	});

 设置成功后,在手工设置TextView的OnClickListener事件,示例代码:

textView.setOnClickListener(new OnClickListener(){
			@Override
			public void onClick(View view) {
				if(!isTextClickAreaLink){
					listView.performItemClick(view);
				}
			}});

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值