美文网首页Android开发学习
textview中设置了clickspan,导致点击事件被截获问

textview中设置了clickspan,导致点击事件被截获问

作者: 大玩具 | 来源:发表于2016-03-10 10:27 被阅读615次

    # public class TextViewWithClick extends TextView {

    public TextViewWithClick(Context context, AttributeSet attrs) {
        super(context, attrs);
    }
    
    @Override
    public boolean onTouchEvent(MotionEvent event) {
        TextView widget = this;
        Object text = widget.getText();
        if (text instanceof Spanned) {
            Spannable buffer = (Spannable) text;
    
            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) {
                        link[0].onClick(widget);
                    } else if (action == MotionEvent.ACTION_DOWN) {
                        Selection.setSelection(buffer,
                                buffer.getSpanStart(link[0]),
                                buffer.getSpanEnd(link[0]));
                    }
                    return true;
                }
            }
    
        }
    
        return false;
    }
    

    }

    相关文章

      网友评论

        本文标题:textview中设置了clickspan,导致点击事件被截获问

        本文链接:https://www.haomeiwen.com/subject/bkjtlttx.html