Handle clicks on TextView's links while using Linkify for finding and setting the links inside the text

android, linkify, spannable, textview, urlspan

Solution

Ok so i finally managed to set my own "OnClickListener" to the TextView's links. My solution was to copy `Linkify` to my project, name it `CustomLinkify` and just change its `applyLink` method:

From:

private static final void applyLink(String url, int start, int end, Spannable text) 
{
    URLSpan span = new URLSpan(url);

    text.setSpan(span, start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
}

To:

private static final void applyLink(final String url, int start, int end, Spannable text) 
{
    URLSpan span = new URLSpan(url)
    {
        @Override
        public void onClick(View widget)
        {
            _onLinkClickListener.onLinkClicked(url);
        }
    };

    text.setSpan(span, start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
}

Where `_onLinkClickListener` is a new field, set by me before using the new `CustomLinkify`.

I know its not a very elegant solution and i prefered google to allow setting a listener through the native Linkify, but, for me, this is better than implementing my own `Spannable` logics (as suggested in other related questions).

I trust the `Linkify` code and i guess i'll check from time to time to see if any changes made on it, if so, i'll of course update `CustomLinkify` with the changes.

Hope this will help someone.

Problem

i have a TextView filled with text which i get from a server. I'm using Linkify for handling all the link searching and for setting a URLSpan where needed throughout its addLinks method. The problem is that the default behavior when clicking a link is opening it in a browser, what i want is to get the clicked link and handle it my self. I don't see any method of Linkify which let me set a "OnClick" or something... Thank for your help :)

Original source