下面列出了android.text.SpannableStringBuilder#getSpanFlags ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
/**
* 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(@NonNull View view) {
try {
CustomTabsIntent.Builder intentBuilder = new CustomTabsIntent.Builder();
intentBuilder.setToolbarColor(ContextCompat.getColor(TimelineDetailActivity.this, R.color.colorPrimary));
intentBuilder.setSecondaryToolbarColor(ContextCompat.getColor(TimelineDetailActivity.this, 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(TimelineDetailActivity.this, Uri.parse(span.getURL()));
}
catch (Exception ignored) { }
}
};
strBuilder.setSpan(clickable, start, end, flags);
strBuilder.removeSpan(span);
}
/**
* 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);
}
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(@NonNull View view) {
String url = span.getURL();
if (url.startsWith("http://course.pku.edu.cn")) {
Intent intent = new Intent(mContext.getActivity(), WebViewActivity.class);
Activity activity = mContext.getActivity();
if (activity != null) {
intent.putExtra("Title", "正在打开链接...");
intent.putExtra("WebViewUrl", url.replaceFirst("http://course.pku.edu.cn", ""));
}
mContext.startActivity(intent);
} else {
Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
mContext.startActivity(browserIntent);
}
}
};
strBuilder.setSpan(clickable, start, end, flags);
strBuilder.removeSpan(span);
}
private void setLinkClickable(final SpannableStringBuilder clickableHtmlBuilder,
final URLSpan urlSpan) {
int start = clickableHtmlBuilder.getSpanStart(urlSpan);
int end = clickableHtmlBuilder.getSpanEnd(urlSpan);
int flags = clickableHtmlBuilder.getSpanFlags(urlSpan);
clickableHtmlBuilder.setSpan(new ClickableSpan() {
public void onClick(View view) {
try {
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse(urlSpan.getURL()));
context.startActivity(intent);
} catch (Throwable e) {
e.printStackTrace();
}
}
}, start, end, flags);
}
private static <T> void end(SpannableStringBuilder text, Class<T> kind, Object repl) {
int len = text.length();
T obj = getLast(text, kind);
int where = text.getSpanStart(obj);
text.removeSpan(obj);
Object[] nestSpans = text.getSpans(where, len, Object.class);
List<NestSpanInfo> spans = new ArrayList<>();
for (Object nestSpan : nestSpans) {
int spanStart = text.getSpanStart(nestSpan);
int spanEnd = text.getSpanEnd(nestSpan);
int spanFlags = text.getSpanFlags(nestSpan);
text.removeSpan(nestSpan);
spans.add(new NestSpanInfo(nestSpan, spanStart, spanEnd, spanFlags));
}
if (where != len) {
text.setSpan(repl, where, len, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}
//reorder spans
for (NestSpanInfo span : spans) {
text.setSpan(span.span, span.start, span.end, span.flag);
}
}
public static void setHtmlWithLinkClickHandler(TextView tv, String html,
Action1<String> linkClickHandler) {
CharSequence sequence = Html.fromHtml(html);
SpannableStringBuilder strBuilder = new SpannableStringBuilder(sequence);
URLSpan[] urls = strBuilder.getSpans(0, sequence.length(), URLSpan.class);
for (URLSpan span : urls) {
int start = strBuilder.getSpanStart(span);
int end = strBuilder.getSpanEnd(span);
int flags = strBuilder.getSpanFlags(span);
ClickableSpan clickable = new ClickableSpan() {
public void onClick(View view) {
linkClickHandler.call(span.getURL());
}
};
strBuilder.setSpan(clickable, start, end, flags);
strBuilder.removeSpan(span);
}
tv.setText(strBuilder);
tv.setMovementMethod(LinkMovementMethod.getInstance());
}
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) {
Uri uri = Uri.parse(span.getURL());
CustomTabsIntent.Builder intentBuilder = new CustomTabsIntent.Builder();
Utils.setupIntentBuilder(intentBuilder, mContext,
((CommentsActivity) mContext).getSharedPreferences());
ChromeCustomTabsHelper.openCustomTab((Activity) mContext, intentBuilder.build(),
uri, null);
}
};
strBuilder.setSpan(clickable, start, end, flags);
strBuilder.removeSpan(span);
}
@Override
public void onPreferenceAfterChange(Preference preference) {
super.onPreferenceAfterChange(preference);
if (preference == advancedSearchPreference && advancedSearchPreference.isChecked()) {
SpannableStringBuilder builder = new SpannableStringBuilder
(getText(R.string.preference_advanced_search_message));
Object[] spans = builder.getSpans(0, builder.length(), Object.class);
for (Object span : spans) {
int start = builder.getSpanStart(span);
int end = builder.getSpanEnd(span);
int flags = builder.getSpanFlags(span);
builder.removeSpan(span);
builder.setSpan(new TypefaceSpan("sans-serif-medium"), start, end, flags);
}
MessageDialog.create(this, builder, false);
}
}
public static void makeLinkClickable(@NonNull SpannableStringBuilder strBuilder, @NonNull final URLSpan span, @NonNull LinkClickableSpan listener)
{
int start = strBuilder.getSpanStart(span);
int end = strBuilder.getSpanEnd(span);
int flags = strBuilder.getSpanFlags(span);
ClickableSpan clickable = new ClickableSpan() {
public void onClick(View view) {
listener.onClick(view, span.getURL());
}
};
strBuilder.setSpan(clickable, start, end, flags);
strBuilder.removeSpan(span);
}
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);
}