Create clickable link in text view in android

Modify the below according to your requirement. Use a SpannableString

String s ="#one #Two Hello World #three";
String split[] = s.split("#");
TextView_tv = (TextView) findViewById( R.id.tv );
for(int i=1;i<split.length;i++)
{
  SpannableString ss1=  new SpannableString("#"+split[i]);     
  ss1.setSpan(new  MyClickableSpan(""+i), 0, 1,  Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
  ss1.setSpan(newForegroundColorSpan(Color.RED),0,1,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
  _tv.append(ss1);
   _tv.append(" ");   
}
_tv.setMovementMethod(LinkMovementMethod.getInstance());

class MyClickableSpan extends ClickableSpan{    
String clicked;
public MyClickableSpan(String string) {

    super();
    clicked =string;
    }

    public void onClick(View tv) {
        if(clicked.equals("1"))
        {
             Toast.makeText(getApplicationContext(), "One",1000).show();
        }
        else if(clicked.equals("2"))
        {
            Toast.makeText(getApplicationContext(), "Two",1000).show();
        }
        else
        {
            Toast.makeText(getApplicationContext(), "Three",1000).show();       
        }

   }

    @Override
    public void updateDrawState(TextPaint ds) {
       ds.setUnderlineText(false); // set to false to remove underline
    }
    } 
   }

Snap on Emulator

On each hash click displays toast one, two and three. Instead of toast start a new activity.

enter image description here

Edit:

If you want the string clicked

 ss1.setSpan(new  MyClickableSpan(""+i,split[i]), 0, 1,  Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

Then

 String clicked;
 String astring;
 public MyClickableSpan(String check,String actualstring) {
super();
clicked =check;
astring =actualstring; // pass this to next activity using intent
}

Then

  public void onClick(View tv) {
        if(clicked.equals("1"))
        {
             Toast.makeText(getApplicationContext(), astring,1000).show();
        }
        else if(clicked.equals("2"))
        {
            Toast.makeText(getApplicationContext(), astring,1000).show();
        }
        else
        {
            Toast.makeText(getApplicationContext(), astring,1000).show();       
        }

   }

Leave a Comment