Control onclicklistener in autolink enabled textview

前端 未结 9 2607
一向
一向 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:47

    one of the @CommonsWare post helps to intercept autolink OnClick event.

    private void fixTextView(TextView tv) {
        SpannableString current = (SpannableString) tv.getText();
        URLSpan[] spans =
                current.getSpans(0, current.length(), URLSpan.class);
    
        for (URLSpan span : spans) {
            int start = current.getSpanStart(span);
            int end = current.getSpanEnd(span);
    
            current.removeSpan(span);
            current.setSpan(new DefensiveURLSpan(span.getURL()), start, end,
                    0);
        }
    }
    
    public static class DefensiveURLSpan extends URLSpan {
        private String mUrl;
    
        public DefensiveURLSpan(String url) {
            super(url);
            mUrl = url;
        }
    
        @Override
        public void onClick(View widget) {
            // openInWebView(widget.getContext(), mUrl); // intercept click event and do something.
            // super.onClick(widget); // or it will do as it is.
        }
    }
    

    Apply above code simply as below. It will go through all linkable texts and replace click events to above event handler.

    fixTextView(textViewContent);
    

提交回复
热议问题