美文网首页
解决TextView和SpannableString点击事件冲突

解决TextView和SpannableString点击事件冲突

作者: 43d60efa37c7 | 来源:发表于2016-11-15 17:10 被阅读208次

```

public class TextViewWithClickSpan extends TextView{

         public TextViewWithClickSpan(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 super.onTouchEvent(event);

}

}

```

相关文章

网友评论

      本文标题:解决TextView和SpannableString点击事件冲突

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