Control onclicklistener in autolink enabled textview

前端 未结 9 2651
一向
一向 2020-12-08 19:13

I am using a TextView for which I have set autolink=\"web\" property in XML file. I have also implemented the onClickListener for this TextView. Th

9条回答
  •  刺人心
    刺人心 (楼主)
    2020-12-08 19:32

    if you wish, you can use the next code which allows to customize the clickable links within the string ( based on this post ) :

    usage:

    final TextView textView = (TextView) findViewById(R.id.textView);
    final Spanned text = Html.fromHtml(getString(...));
    textView.setText(text);
    textView.setMovementMethod(new LinkMovementMethodExt());
    

    LinkMovementMethodExt.java

    public class LinkMovementMethodExt extends LinkMovementMethod {
        private static LinkMovementMethod sInstance;
    
        public static MovementMethod getInstance() {
            if (sInstance == null)
                sInstance = new LinkMovementMethodExt();
            return sInstance;
        }
    
        @Override
        public boolean onTouchEvent(final TextView widget, final Spannable buffer, final MotionEvent event) {
            final int action = event.getAction();
            if (action == MotionEvent.ACTION_UP || action == MotionEvent.ACTION_DOWN) {
                final int x = (int) event.getX() - widget.getTotalPaddingLeft() + widget.getScrollX();
                final int y = (int) event.getY() - widget.getTotalPaddingTop() + widget.getScrollY();
                final Layout layout = widget.getLayout();
                final int line = layout.getLineForVertical(y);
                final int off = layout.getOffsetForHorizontal(line, x);
                final ClickableSpan[] link = buffer.getSpans(off, off, ClickableSpan.class);
                if (link.length != 0) {
                    //do something with the clicked item...
                    return true;
                }
            }
            return super.onTouchEvent(widget, buffer, event);
        }
    
    }
    

提交回复
热议问题