final Context context = ... // whereever your context is CharSequence sequence = Html.fromSource(context.getString(R.string.clickable_string)); SpannableStringBuilder strBuilder = new SpannableStringBuilder(sequence); UnderlineSpan[] underlines = strBuilder.getSpans(UnderlineSpan.class); for(UnderlineSpan span : underlines) { int start = strBuilder.getSpanStart(span); int end = strBuilder.getSpanEnd(span); int flags = strBuilder.getSpanFlags(span); ClickableSpan myActivityLauncher = new ClickableSpan() { public void onClick(View view) { context.startActivity(getIntentForActivityToStart()); } }; strBuilder.setSpan(myActivityLauncher, start, end, flags); } TextView textView = ... textView.setText(strBuilder); textView.setMovementMethod(LinkMovementMethod.getInstance());
TextView decription = (TextView)convertView.findViewById(R.id.library_rss_expan_chaild_des_textView); String dec=d.get_description()+"<a href='"+d.get_link()+"'><u>more</u></a>"; CharSequence sequence = Html.fromHtml(dec); SpannableStringBuilder strBuilder = new SpannableStringBuilder(sequence); UnderlineSpan[] underlines = strBuilder.getSpans(0, 10, UnderlineSpan.class); for(UnderlineSpan span : underlines) { int start = strBuilder.getSpanStart(span); int end = strBuilder.getSpanEnd(span); int flags = strBuilder.getSpanFlags(span); ClickableSpan myActivityLauncher = new ClickableSpan() { public void onClick(View view) { Log.e(TAG, "on click"); Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(d.get_link())); mContext.startActivity(intent); } }; strBuilder.setSpan(myActivityLauncher, start, end, flags); } decription.setText(strBuilder); decription.setLinksClickable(true); decription.setMovementMethod(LinkMovementMethod.getInstance());
@Override public int getSpanFlags(Object span) { return mSpannableString.getSpanFlags(span); }
/** * Return the correct flags for the DynamicLayout$ChangeWatcher span. */ @Override public int getSpanFlags(Object tag) { if (isWatcher(tag)) { final WatcherWrapper watcher = getWatcherFor(tag); if (watcher != null) { tag = watcher; } } return super.getSpanFlags(tag); }
private void makeLinkClickable(SpannableStringBuilder strBuilder, final URLSpan span, Runnable runnable) { int start = strBuilder.getSpanStart(span); int end = strBuilder.getSpanEnd(span); int flags = strBuilder.getSpanFlags(span); ClickableSpan clickable = new ClickableSpan() { public void onClick(View view) { runnable.run(); } }; strBuilder.setSpan(clickable, start, end, flags); strBuilder.removeSpan(span); }
int start = builder.getSpanStart(span); int end = builder.getSpanEnd(span); int flags = builder.getSpanFlags(span);
TextView decription = (TextView)convertView.findViewById(R.id.library_rss_expan_chaild_des_textView); String dec=d.get_description()+"<a href='"+d.get_link()+"'><u>more</u></a>"; CharSequence sequence = Html.fromHtml(dec); SpannableStringBuilder strBuilder = new SpannableStringBuilder(sequence); UnderlineSpan[] underlines = strBuilder.getSpans(0, 10, UnderlineSpan.class); for(UnderlineSpan span : underlines) { int start = strBuilder.getSpanStart(span); int end = strBuilder.getSpanEnd(span); int flags = strBuilder.getSpanFlags(span); ClickableSpan myActivityLauncher = new ClickableSpan() { public void onClick(View view) { Log.e(TAG, "on click"); Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(d.get_link())); mContext.startActivity(intent); } }; strBuilder.setSpan(myActivityLauncher, start, end, flags); } decription.setText(strBuilder); decription.setLinksClickable(true); decription.setMovementMethod(LinkMovementMethod.getInstance());
final TextView textView = (TextView) findViewById(R.id.text); final CharSequence text = textView.getText(); final SpannableStringBuilder spannableStringBuilder = new SpannableStringBuilder(text); final URLSpan[] spans = spannableStringBuilder.getSpans(0, text.length(), URLSpan.class); final URLSpan span = spans[0]; final int start = spannableStringBuilder.getSpanStart(span); final int end = spannableStringBuilder.getSpanEnd(span); final int flags = spannableStringBuilder.getSpanFlags(span); final ClickableSpan clickableSpan = new ClickableSpan() { public void onClick(View view) { Log.d(TAG, "Clicked: " + span.getURL()); } }; spannableStringBuilder.setSpan(clickableSpan, start, end, flags); spannableStringBuilder.removeSpan(span); textView.setText(spannableStringBuilder); textView.setLinksClickable(true); textView.setMovementMethod(LinkMovementMethod.getInstance());
@Override public void setUpRedeemDescription(String descriptionText, String clickableText, String url) { SpannableStringBuilder spannableTitleBuilder = new SpannableStringBuilder(descriptionText).append(" ") .append(clickableText); spannableTitleBuilder.setSpan(new ForegroundColorSpan(colorBlue), descriptionText.length() + 1, spannableTitleBuilder.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); final URLSpan urlSpan = new URLSpan(url); spannableTitleBuilder.setSpan(urlSpan, descriptionText.length() + 1, spannableTitleBuilder.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); int start = spannableTitleBuilder.getSpanStart(urlSpan); int end = spannableTitleBuilder.getSpanEnd(urlSpan); int flags = spannableTitleBuilder.getSpanFlags(urlSpan); ClickableSpan linkOnClick = new ClickableSpan() { @Override public void onClick(View widget) { presenter.redeemUrlClicked(); } }; spannableTitleBuilder.setSpan(linkOnClick, start, end, flags); spannableTitleBuilder.removeSpan(urlSpan); description.setText(spannableTitleBuilder); description.setMovementMethod(LinkMovementMethod.getInstance()); }
/** * Link clickable. * * @param strBuilder * A string builder. * @param span * The span with url. */ private void makeLinkClickable(SpannableStringBuilder strBuilder, final URLSpan span) { int start = strBuilder.getSpanStart(span); int end = strBuilder.getSpanEnd(span); int flags = strBuilder.getSpanFlags(span); ClickableSpan clickable = new ClickableSpan() { public void onClick(View view) { try { CustomTabsIntent.Builder intentBuilder = new CustomTabsIntent.Builder(); intentBuilder.setToolbarColor(ContextCompat.getColor(context, R.color.colorPrimary)); intentBuilder.setSecondaryToolbarColor(ContextCompat.getColor(context, R.color.colorPrimaryDark)); CustomTabsIntent customTabsIntent = intentBuilder.build(); customTabsIntent.intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY); customTabsIntent.intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); customTabsIntent.launchUrl(context, Uri.parse(span.getURL())); } catch (Exception ignored) { } } }; strBuilder.setSpan(clickable, start, end, flags); strBuilder.removeSpan(span); }
protected void makeLinkClickable(SpannableStringBuilder strBuilder, final URLSpan span) { int start = strBuilder.getSpanStart(span); int end = strBuilder.getSpanEnd(span); int flags = strBuilder.getSpanFlags(span); ClickableSpan clickable = new ClickableSpan() { public void onClick(View view) { Log.d("LipAdapter", span.getURL()); } }; strBuilder.setSpan(clickable, start, end, flags); strBuilder.removeSpan(span); }
public class LinkShortener { public static final int MAX_LINK_LENGTH = 20; public static CharSequence shortenLinks(String text) { return shortenLinks(text, Linkify.ALL); } public static CharSequence shortenLinks(String text, int linkMask) { SpannableStringBuilder builder = new SpannableStringBuilder(text); Linkify.addLinks(builder, linkMask); URLSpan[] spans = builder.getSpans(0, builder.length(), URLSpan.class); for (URLSpan span : spans) { int start = builder.getSpanStart(span); int end = builder.getSpanEnd(span); int flags = builder.getSpanFlags(span); CharSequence linkText = builder.subSequence(start, end); if (linkText.length() > MAX_LINK_LENGTH) { linkText = linkText.subSequence(0, 20) + "…"; builder.replace(start, end, linkText); builder.removeSpan(span); builder.setSpan(span, start, start+linkText.length(), flags); } } return builder; } }
protected void makeLinkClickable(SpannableStringBuilder strBuilder, final URLSpan span) { int start = strBuilder.getSpanStart(span); int end = strBuilder.getSpanEnd(span); int flags = strBuilder.getSpanFlags(span); ClickableSpan clickable = new ClickableSpan() { @Override public void onClick(View widget) { Log.d("LipAdapter", span.getURL()); } @Override public void updateDrawState(TextPaint ds) { super.updateDrawState(ds); } }; strBuilder.setSpan(clickable, start, end, flags); strBuilder.removeSpan(span); }
int flags = strBuilder.getSpanFlags(span); ClickableSpan myActivityLauncher = new ClickableSpan() {
int start = b.getSpanStart(span); int end = b.getSpanEnd(span); int flags = b.getSpanFlags(span); final String url = span.getURL(); ClickableSpan s2 = new ClickableSpan() {
// textView.setText("Lucy is very nice. Here is her link. https://www.google.com"); final String source = "Lucy is very nice. Here is her link. <a href=\"scheme://some.link\">Click</a>"; final Spanned html = Html.fromHtml(source); final SpannableStringBuilder spannableStringBuilder = new SpannableStringBuilder(html); final URLSpan[] spans = spannableStringBuilder.getSpans(0, html.length(), URLSpan.class); final URLSpan span = spans[0]; final int start = spannableStringBuilder.getSpanStart(span); final int end = spannableStringBuilder.getSpanEnd(span); final int flags = spannableStringBuilder.getSpanFlags(span); final ClickableSpan clickableSpan = new ClickableSpan() { public void onClick(View view) { Log.d(TAG, "Clicked: " + span.getURL()); } }; spannableStringBuilder.setSpan(clickableSpan, start, end, flags); spannableStringBuilder.removeSpan(span); textView.setText(spannableStringBuilder); textView.setLinksClickable(true); textView.setMovementMethod(LinkMovementMethod.getInstance());
public <T> void endSpans(Class<T> kind, EndSpanChecker<T> lambda) { for (T span : builder.getSpans(builder.length(), builder.length(), kind)) { int type = builder.getSpanFlags(span) & Spannable.SPAN_POINT_MARK_MASK; if (type == Spannable.SPAN_MARK_POINT || type == Spannable.SPAN_POINT_POINT) { if (lambda != null && !lambda.shouldEndSpan(span)) continue; int start = builder.getSpanStart(span); builder.removeSpan(span); builder.setSpan(span, start, builder.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE | (type & ~Spannable.SPAN_POINT_MARK_MASK)); } } }
@Override public void write(Parcel dest, int flags) { dest.writeString(mSpannableString.toString()); RichTextSpan[] spans = getSpans(); int[] spanStarts = new int[spans.length]; int[] spanEnds = new int[spans.length]; int[] spanFlags = new int[spans.length]; for(int index = 0; index < spans.length; index ++){ RichTextSpan currentSpan = spans[index]; spanStarts[index] = mSpannableString.getSpanStart(currentSpan); spanEnds[index] = mSpannableString.getSpanEnd(currentSpan); spanFlags[index] = mSpannableString.getSpanFlags(currentSpan); } dest.writeIntArray(spanStarts); dest.writeIntArray(spanEnds); dest.writeIntArray(spanFlags); dest.writeTypedArray(spans, flags); }
final int spanStart = mTempObjectForCommitText.getSpanStart(span); final int spanEnd = mTempObjectForCommitText.getSpanEnd(span); final int spanFlags = mTempObjectForCommitText.getSpanFlags(span);
color = senderColor; builder.setSpan(new ForegroundColorSpan(color), builder.getSpanStart(span), builder.getSpanEnd(span), builder.getSpanFlags(span)); builder.removeSpan(span);