handle textview link click in my android app

前端 未结 12 1094
迷失自我
迷失自我 2020-11-22 04:33

I\'m currently rendering HTML input in a TextView like so:

tv.setText(Html.fromHtml(\"test\"));

The HTML b

12条回答
  •  萌比男神i
    2020-11-22 05:07

    Here is a more generic solution based on @Arun answer

    public abstract class TextViewLinkHandler extends LinkMovementMethod {
    
        public boolean onTouchEvent(TextView widget, Spannable buffer, MotionEvent event) {
            if (event.getAction() != MotionEvent.ACTION_UP)
                return super.onTouchEvent(widget, buffer, event);
    
            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);
    
            URLSpan[] link = buffer.getSpans(off, off, URLSpan.class);
            if (link.length != 0) {
                onLinkClick(link[0].getURL());
            }
            return true;
        }
    
        abstract public void onLinkClick(String url);
    }
    

    To use it just implement onLinkClick of TextViewLinkHandler class. For instance:

        textView.setMovementMethod(new TextViewLinkHandler() {
            @Override
            public void onLinkClick(String url) {
                Toast.makeText(textView.getContext(), url, Toast.LENGTH_SHORT).show();
            }
        });
    

提交回复
热议问题