zoukankan      html  css  js  c++  java
  • TextView链接点击和长按冲突

     1.重写

    import android.text.Layout;
    import android.text.Selection;
    import android.text.Spannable;
    import android.text.method.LinkMovementMethod;
    import android.text.style.ClickableSpan;
    import android.view.MotionEvent;
    import android.widget.TextView;
    
    /**
     * Created by Administrator on 2016/11/14.
     */
    public class LinkMovementClickMethod extends LinkMovementMethod {
        private long lastClickTime;
    
        private static final long CLICK_DELAY = 500l;
    
        @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) {
                        if (System.currentTimeMillis() - lastClickTime < CLICK_DELAY) {
                            link[0].onClick(widget);
                        }
                    } else if (action == MotionEvent.ACTION_DOWN) {
                        Selection.setSelection(buffer,
                                buffer.getSpanStart(link[0]),
                                buffer.getSpanEnd(link[0]));
                        lastClickTime = System.currentTimeMillis();
                    }
    
                    return true;
                } else {
                    Selection.removeSelection(buffer);
                }
            }
            return super.onTouchEvent(widget, buffer, event);
        }
    
        public static LinkMovementClickMethod getInstance() {
            if (null == sInstance) {
                sInstance = new LinkMovementClickMethod();
            }
            return sInstance;
        }
    
        private static LinkMovementClickMethod sInstance;
    }

    2.监听

    view.setMovementMethod(new LinkMovementClickMethod());

    简单说就是判断点击操作按下到放开所经历的时间长度

  • 相关阅读:
    linux 中字符映射错误,#、、|、“ 不能输入
    Qt::Key_Return Qt::Key_Enter 区别
    如何监控系统用户实时执行的Linux命令
    a3考卷转2张a4
    kali
    字典序最小问题(贪心)
    nmap 目标指定
    debian 系统安装最新版本nmap方法:
    TransCAD是由美国Caliper公司开发的一套强有力的交通规划和需求预测软件
    GIS 地图的图层(切片/瓦片)概念
  • 原文地址:https://www.cnblogs.com/anni-qianqian/p/6061754.html
Copyright © 2011-2022 走看看