Finally i have achieved hashtags weblinks clickable and made them very attractive by keeping different colors
using android sdk SpannableString and it's ClickableSpan .
private void Linkfiy(String a, TextView textView) {
Pattern urlPattern = Patterns.WEB_URL;
Pattern mentionPattern = Pattern.compile("(@[A-Za-z0-9_-]+)");
Pattern hashtagPattern = Pattern.compile("#(\\w+|\\W+)");
Matcher o = hashtagPattern.matcher(a);
Matcher mention = mentionPattern.matcher(a);
Matcher weblink = urlPattern.matcher(a);
SpannableString spannableString = new SpannableString(a);
//#hashtags
while (o.find()) {
spannableString.setSpan(new NonUnderlinedClickableSpan(o.group(),
0), o.start(), o.end(),
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
}
// --- @mention
while (mention.find()) {
spannableString.setSpan(
new NonUnderlinedClickableSpan(mention.group(), 1), mention.start(), mention.end(),
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
}
//@weblink
while (weblink.find()) {
spannableString.setSpan(
new NonUnderlinedClickableSpan(weblink.group(), 2), weblink.start(), weblink.end(),
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
}
textView.setText(spannableString);
textView.setMovementMethod(LinkMovementMethod.getInstance());
}
NonUnderlinedClickableSpan class
public class NonUnderlinedClickableSpan extends ClickableSpan {
int type;// 0-hashtag , 1- mention, 2- url link
String text;// Keyword or url
String time;
public NonUnderlinedClickableSpan(String text, int type) {
this.text = text;
this.type = type;
this.time = time;
}
@Override
public void updateDrawState(TextPaint ds) {
//adding colors
if (type == 1)
ds.setColor(InstagramIndetail.this.getResources().getColor(
R.color.link_color_mention));
else if (type == 2)
ds.setColor(InstagramIndetail.this.getResources().getColor(
R.color.link_color_url));
else
ds.setColor(InstagramIndetail.this.getResources().getColor(
R.color.link_color_hashtag));
ds.setUnderlineText(false);
// ds.setTypeface(Typeface.DEFAULT_BOLD);
}
@Override
public void onClick(View v) {
Debug.e("click done", "ok " + text);
if (type == 0) {
//pass hashtags to activity using intents
} else if (type == 1) {
//do for mentions
} else {
// passing weblinks urls to webview activity
startWebViewActivity(text);
}
}
}