Java 类android.text.style.URLSpan 实例源码
项目:GitHub
文件:MyURLSpan.java
/**
* @param context
* @param spannable
* @param title
* @return
*/
public static SpannableStringBuilder getText(Activity context, Spannable spannable, String title) {
if (spannable == null || spannable.length() <= 0) {
Log.e(TAG, "getText spannable == null || spannable.length() <= 0 >> return new SpannableStringBuilder();");
return new SpannableStringBuilder();
}
SpannableStringBuilder builder = new SpannableStringBuilder(spannable);
builder.clearSpans();// should clear old spans
URLSpan[] urls = spannable.getSpans(0, spannable.length(), URLSpan.class);
if (urls != null) {
for (URLSpan urlSpan : urls) {
if (urlSpan != null) {
MyURLSpan myURLSpan = new MyURLSpan(context, urlSpan.getURL(), title);
builder.setSpan(myURLSpan, spannable.getSpanStart(urlSpan), spannable
.getSpanEnd(urlSpan), Spannable.SPAN_EXCLUSIVE_INCLUSIVE);
}
}
}
return builder;
}
项目:GitHub
文件:MyURLSpan.java
/**
* @param context
* @param spannable
* @param title
* @return
*/
public static SpannableStringBuilder getText(Activity context, Spannable spannable, String title) {
if (spannable == null || spannable.length() <= 0) {
Log.e(TAG, "getText spannable == null || spannable.length() <= 0 >> return new SpannableStringBuilder();");
return new SpannableStringBuilder();
}
SpannableStringBuilder builder = new SpannableStringBuilder(spannable);
builder.clearSpans();// should clear old spans
URLSpan[] urls = spannable.getSpans(0, spannable.length(), URLSpan.class);
if (urls != null) {
for (URLSpan urlSpan : urls) {
if (urlSpan != null) {
MyURLSpan myURLSpan = new MyURLSpan(context, urlSpan.getURL(), title);
builder.setSpan(myURLSpan, spannable.getSpanStart(urlSpan), spannable
.getSpanEnd(urlSpan), Spannable.SPAN_EXCLUSIVE_INCLUSIVE);
}
}
}
return builder;
}
项目:Forge
文件:GeneratorFragment.java
/**
* Taken from Stack Overflow - https://stackoverflow.com/a/17201376/6052295
* Adds links to a HTML string
*
* @param html the HTML string to add links to
* @param linkifyMask the link type
* @return The spannable text with clickable links
*/
public static Spannable linkifyHtml(String html, int linkifyMask) {
Spanned text = fromHtml(fromHtml(html).toString());
URLSpan[] currentSpans = text.getSpans(0, text.length(), URLSpan.class);
SpannableString buffer = new SpannableString(text);
Linkify.addLinks(buffer, linkifyMask);
for (URLSpan span : currentSpans) {
int end = text.getSpanEnd(span);
int start = text.getSpanStart(span);
buffer.setSpan(span, start, end, 0);
}
return buffer;
}
项目:yyox
文件:CustomTextView.java
/**
* 解析link
*
* @param tv_content
* @param context
*/
private static void dealUnderLinesData(TextView tv_content, Context context) {
CharSequence charSequence = tv_content.getText();
if (charSequence instanceof Spannable) {
tv_content.setText("");
Spannable s = EmojiDisplay.spannableFilter(tv_content.getContext(),
new SpannableStringBuilder(charSequence),
charSequence,
EmoticonsKeyboardUtils.getFontHeight(tv_content));
URLSpan[] spans = s.getSpans(0, s.length(), URLSpan.class);
for (URLSpan span : spans) {
int start = s.getSpanStart(span);
int end = s.getSpanEnd(span);
String clickText = s.subSequence(start, end).toString();
URLSpanNoUnderline urlSpanNoUnderline = new URLSpanNoUnderline(context, span.getURL(), clickText);
s.setSpan(urlSpanNoUnderline, start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}
tv_content.append(s);
}
}
项目:yyox
文件:CustomTextView.java
/**
* 解析机器人对话link
*
* @param textView
*/
private static void dealAILink(TextView textView, String type) {
CharSequence charSequence = textView.getText();
if (charSequence instanceof Spannable) {
textView.setText("");
Spannable s = (Spannable) charSequence;
URLSpan[] spans = s.getSpans(0, s.length(), URLSpan.class);
for (URLSpan span : spans) {
int start = s.getSpanStart(span);
int end = s.getSpanEnd(span);
String clickContent = s.subSequence(start, end).toString();
AIURLSpan myURLSpan = new AIURLSpan(span.getURL(), type, clickContent, textView.getContext());
s.setSpan(myURLSpan, start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}
textView.append(s);
}
}
项目:yyox
文件:CustomTextView.java
/**
* 解析富文本link
*
* @param textView
*/
private static void dealCustomLink(TextView textView) {
CharSequence charSequence = textView.getText();
if (charSequence instanceof Spannable) {
textView.setText("");
Spannable s = (Spannable) charSequence;
URLSpan[] spans = s.getSpans(0, s.length(), URLSpan.class);
for (URLSpan span : spans) {
int start = s.getSpanStart(span);
int end = s.getSpanEnd(span);
CustomClickSpan myURLSpan = new CustomClickSpan(textView.getContext(), span.getURL());
s.setSpan(myURLSpan, start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}
textView.append(s);
}
}
项目:airgram
文件:ChatMessageCell.java
@Override
protected void onLongPress() {
if (pressedLink instanceof URLSpanNoUnderline) {
URLSpanNoUnderline url = (URLSpanNoUnderline) pressedLink;
if (url.getURL().startsWith("/")) {
delegate.didPressedUrl(currentMessageObject, pressedLink, true);
return;
}
} else if (pressedLink instanceof URLSpan) {
delegate.didPressedUrl(currentMessageObject, pressedLink, true);
return;
}
resetPressedLink(-1);
if (buttonPressed != 0 || pressedBotButton != -1) {
buttonPressed = 0;
pressedBotButton = -1;
invalidate();
}
if (delegate != null) {
delegate.didLongPressed(this);
}
}
项目:APIJSON-Android-RxJava
文件:MyURLSpan.java
/**
* @param context
* @param spannable
* @param title
* @return
*/
public static SpannableStringBuilder getText(Activity context, Spannable spannable, String title) {
if (spannable == null || spannable.length() <= 0) {
Log.e(TAG, "getText spannable == null || spannable.length() <= 0 >> return new SpannableStringBuilder();");
return new SpannableStringBuilder();
}
SpannableStringBuilder builder = new SpannableStringBuilder(spannable);
builder.clearSpans();// should clear old spans
URLSpan[] urls = spannable.getSpans(0, spannable.length(), URLSpan.class);
if (urls != null) {
for (URLSpan urlSpan : urls) {
if (urlSpan != null) {
MyURLSpan myURLSpan = new MyURLSpan(context, urlSpan.getURL(), title);
builder.setSpan(myURLSpan, spannable.getSpanStart(urlSpan), spannable
.getSpanEnd(urlSpan), Spannable.SPAN_EXCLUSIVE_INCLUSIVE);
}
}
}
return builder;
}
项目:Nird2
文件:UiUtils.java
public static void makeLinksClickable(TextView v) {
SpannableStringBuilder ssb = new SpannableStringBuilder(v.getText());
URLSpan[] spans = ssb.getSpans(0, ssb.length(), URLSpan.class);
for (URLSpan span : spans) {
int start = ssb.getSpanStart(span);
int end = ssb.getSpanEnd(span);
final String url = span.getURL();
ssb.removeSpan(span);
ClickableSpan cSpan = new ClickableSpan() {
@Override
public void onClick(View v2) {
LinkDialogFragment f = LinkDialogFragment.newInstance(url);
FragmentManager fm = ((AppCompatActivity) v2.getContext())
.getSupportFragmentManager();
f.show(fm, f.getUniqueTag());
}
};
ssb.setSpan(cSpan, start, end, 0);
}
v.setText(ssb);
v.setMovementMethod(ArticleMovementMethod.getInstance());
}
项目:Nird2
文件:UiUtils.java
public static void makeLinksClickable(TextView v) {
SpannableStringBuilder ssb = new SpannableStringBuilder(v.getText());
URLSpan[] spans = ssb.getSpans(0, ssb.length(), URLSpan.class);
for (URLSpan span : spans) {
int start = ssb.getSpanStart(span);
int end = ssb.getSpanEnd(span);
final String url = span.getURL();
ssb.removeSpan(span);
ClickableSpan cSpan = new ClickableSpan() {
@Override
public void onClick(View v2) {
LinkDialogFragment f = LinkDialogFragment.newInstance(url);
FragmentManager fm = ((AppCompatActivity) v2.getContext())
.getSupportFragmentManager();
f.show(fm, f.getUniqueTag());
}
};
ssb.setSpan(cSpan, start, end, 0);
}
v.setText(ssb);
v.setMovementMethod(ArticleMovementMethod.getInstance());
}
项目:orgzly-android
文件:OrgFormatterTest.java
public OrgSpannable(String str) {
SpannableStringBuilder ssb = OrgFormatter.INSTANCE.parse(context, str);
string = ssb.toString();
Object[] allSpans = ssb.getSpans(0, ssb.length() - 1, Object.class);
spans = new OrgSpan[allSpans.length];
for (int i = 0; i < allSpans.length; i++) {
spans[i] = new OrgSpan();
spans[i].start = ssb.getSpanStart(allSpans[i]);
spans[i].end = ssb.getSpanEnd(allSpans[i]);
spans[i].className = allSpans[i].getClass().getSimpleName();
if (allSpans[i] instanceof URLSpan) {
spans[i].url = ((URLSpan)allSpans[i]).getURL();
}
}
}
项目:PlusGram
文件:ChatMessageCell.java
@Override
protected void onLongPress() {
if (pressedLink instanceof URLSpanNoUnderline) {
URLSpanNoUnderline url = (URLSpanNoUnderline) pressedLink;
if (url.getURL().startsWith("/")) {
delegate.didPressedUrl(currentMessageObject, pressedLink, true);
return;
}
} else if (pressedLink instanceof URLSpan) {
delegate.didPressedUrl(currentMessageObject, pressedLink, true);
return;
}
resetPressedLink(-1);
if (buttonPressed != 0 || pressedBotButton != -1) {
buttonPressed = 0;
pressedBotButton = -1;
invalidate();
}
if (delegate != null) {
delegate.didLongPressed(this);
}
}
项目:underlx
文件:HelpFragment.java
private void setHtmlFromHelpFile(String file) {
htmltv.setHtml(getHelpFileContents(file));
htmltv.setText(RichTextUtils.replaceAll((Spanned) htmltv.getText(), URLSpan.class, new RichTextUtils.URLSpanConverter(), new RichTextUtils.ClickSpan.OnClickListener() {
@Override
public void onClick(String url) {
if(mListener == null) {
return;
}
if (url.startsWith("help:")) {
mListener.onHelpLinkClicked(url.substring(5));
} else if (url.startsWith("station:")) {
mListener.onStationLinkClicked(url.substring(8));
} else if (url.startsWith("mailto:")) {
mListener.onMailtoLinkClicked(url.substring(7));
} else {
mListener.onLinkClicked(url);
}
}
}));
}
项目:Ghost-Android
文件:AppUtils.java
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());
}
项目:Tusky
文件:StatusDetailedViewHolder.java
private void setApplication(@Nullable Status.Application app) {
if (app != null) {
timestampInfo.append(" • ");
if (app.website != null) {
URLSpan span = new CustomURLSpan(app.website);
SpannableStringBuilder text = new SpannableStringBuilder(app.name);
text.setSpan(span, 0, app.name.length(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
timestampInfo.append(text);
timestampInfo.setMovementMethod(LinkMovementMethod.getInstance());
} else {
timestampInfo.append(app.name);
}
}
}
项目:Tusky
文件:ComposeActivity.java
private void onUploadSuccess(final QueuedMedia item, Attachment media) {
item.id = media.id;
item.preview.setProgress(-1);
item.readyStage = QueuedMedia.ReadyStage.UPLOADED;
/* Add the upload URL to the text field. Also, keep a reference to the span so if the user
* chooses to remove the media, the URL is also automatically removed. */
item.uploadUrl = new URLSpan(media.textUrl);
int end = 1 + media.textUrl.length();
SpannableStringBuilder builder = new SpannableStringBuilder();
builder.append(' ');
builder.append(media.textUrl);
builder.setSpan(item.uploadUrl, 1, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
int cursorStart = textEditor.getSelectionStart();
int cursorEnd = textEditor.getSelectionEnd();
textEditor.append(builder);
textEditor.setSelection(cursorStart, cursorEnd);
waitForMediaLatch.countDown();
}
项目:MyTravelingDiary
文件:InviteFriendsActivity.java
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_invite_friends);
ButterKnife.bind(this);
Intent intent = getIntent();
String addresseeName = intent.getStringExtra("contactName");
addresseePhone = intent.getStringExtra("contactPhone");
mAddresseeName.setText(addresseeName);
SpannableString inviteMessage = new SpannableString(this.getResources().getString(R.string.mine_send_message));
message = this.getResources().getString(R.string.mine_send_message);
inviteMessage.setSpan(new ForegroundColorSpan(Color.BLACK), 0, 54, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
inviteMessage.setSpan(new URLSpan("http://www.xingka.cc"), 54, 74,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
inviteMessage.setSpan(new ForegroundColorSpan(Color.BLACK), 74, 88, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
mInviteMessage.setText(inviteMessage);
mInviteMessage.setMovementMethod(LinkMovementMethod.getInstance());
}
项目:insapp-android
文件:Utils.java
public static void convertToLinkSpan(Context context, TextView textView) {
Spannable s = new SpannableString(textView.getText());
URLSpan[] spans = s.getSpans(0, s.length(), URLSpan.class);
for (URLSpan span : spans) {
int start = s.getSpanStart(span);
int end = s.getSpanEnd(span);
s.removeSpan(span);
span = new LinkSpan(context, span.getURL());
s.setSpan(span, start, end, 0);
}
textView.setText(s);
}
项目:Paper-Tales
文件:WallActivity.java
@Override
public CharSequence getTransformation(CharSequence src, View view) {
if (view instanceof TextView) {
TextView textView = (TextView) view;
Linkify.addLinks(textView, Linkify.WEB_URLS);
if (textView.getText() != null && textView.getText() instanceof Spannable) {
Spannable text = (Spannable) textView.getText();
URLSpan[] spans = text.getSpans(0, textView.length(), URLSpan.class);
for (int i = spans.length - 1; i >= 0; i--) {
URLSpan oldSpan = spans[i];
int start = text.getSpanStart(oldSpan), end = text.getSpanEnd(oldSpan);
String url = oldSpan.getURL();
text.removeSpan(oldSpan);
text.setSpan(new CustomTabsURLSpan(url), start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
}
return text;
}
}
return src;
}
项目:APReader
文件:CustomTabsMovementMethod.java
@Override
public boolean onSingleTapConfirmed(MotionEvent event) {
int x = (int) event.getX();
int y = (int) event.getY();
x -= textView.getTotalPaddingLeft();
y -= textView.getTotalPaddingTop();
x += textView.getScrollX();
y += textView.getScrollY();
Layout layout = textView.getLayout();
int line = layout.getLineForVertical(y);
int off = layout.getOffsetForHorizontal(line, x);
URLSpan[] link = buffer.getSpans(off, off, URLSpan.class);
if (link.length > 0) {
String linkText = link[0].getURL();
if (Patterns.WEB_URL.matcher(linkText).matches())
CustomTabsBuilder.open(context, Uri.parse(linkText));
return true;
}
return false;
}
项目:Mediator_Android
文件:SafeURLSpan.java
public static CharSequence replaceURLSpans(CharSequence text) {
if (text instanceof Spannable) {
final Spannable s = (Spannable) text;
final URLSpan[] spans = s.getSpans(0, s.length(), URLSpan.class);
if (spans != null && spans.length > 0) {
for (int i = spans.length - 1; i >= 0; i--) {
final URLSpan span = spans[i];
final int start = s.getSpanStart(span);
final int end = s.getSpanEnd(span);
final int flags = s.getSpanFlags(span);
s.removeSpan(span);
s.setSpan(new SafeURLSpan(span.getURL()), start, end, flags);
}
}
}
return text;
}
项目:APIJSON
文件:MyURLSpan.java
/**
* @param context
* @param spannable
* @param title
* @return
*/
public static SpannableStringBuilder getText(Activity context, Spannable spannable, String title) {
if (spannable == null || spannable.length() <= 0) {
Log.e(TAG, "getText spannable == null || spannable.length() <= 0 >> return new SpannableStringBuilder();");
return new SpannableStringBuilder();
}
SpannableStringBuilder builder = new SpannableStringBuilder(spannable);
builder.clearSpans();// should clear old spans
URLSpan[] urls = spannable.getSpans(0, spannable.length(), URLSpan.class);
if (urls != null) {
for (URLSpan urlSpan : urls) {
if (urlSpan != null) {
MyURLSpan myURLSpan = new MyURLSpan(context, urlSpan.getURL(), title);
builder.setSpan(myURLSpan, spannable.getSpanStart(urlSpan), spannable
.getSpanEnd(urlSpan), Spannable.SPAN_EXCLUSIVE_INCLUSIVE);
}
}
}
return builder;
}
项目:Derpibooru
文件:HtmlTextView.java
private void makeLinkClickable(SpannableStringBuilder strBuilder, URLSpan span) {
final String url = span.getURL();
/* http://stackoverflow.com/a/19989677/1726690 */
int start = strBuilder.getSpanStart(span);
int end = strBuilder.getSpanEnd(span);
int flags = strBuilder.getSpanFlags(span);
ClickableSpan clickable = new ClickableSpan() {
public void onClick(View view) {
if ((!onLinkClicked(url)) && (mLinkListener != null)) {
mLinkListener.onLinkClick(url);
}
}
};
strBuilder.setSpan(clickable, start, end, flags);
strBuilder.removeSpan(span);
}
项目:xowa_android
文件:WidgetProviderFeaturedPage.java
private String findFeaturedArticleTitle(String pageLeadContent) {
// Extract the actual link to the featured page in a hacky way (until we
// have the correct API for it):
// Parse the HTML, and look for the first link, which should be the
// article of the day.
Spanned text = Html.fromHtml(pageLeadContent);
URLSpan[] spans = text.getSpans(0, text.length(), URLSpan.class);
String titleText = "";
for (URLSpan span : spans) {
if (!span.getURL().startsWith("/wiki/")
|| (text.getSpanEnd(span) - text.getSpanStart(span) <= 1)) {
continue;
}
PageTitle title = WikipediaApp.getInstance().getPrimarySite()
.titleForInternalLink(decodeURL(span.getURL()));
if (!title.isFilePage() && !title.isSpecial()) {
titleText = title.getDisplayText();
break;
}
}
return titleText;
}
项目:xowa_android
文件:LinkMovementMethodExt.java
@Override
public boolean onTouchEvent(@NonNull final TextView widget, @NonNull final Spannable buffer, @NonNull final MotionEvent event) {
final int action = event.getAction();
if (action == MotionEvent.ACTION_UP) {
final int x = (int) event.getX() - widget.getTotalPaddingLeft() + widget.getScrollX();
final int y = (int) event.getY() - widget.getTotalPaddingTop() + widget.getScrollY();
final Layout layout = widget.getLayout();
final int line = layout.getLineForVertical(y);
final int off = layout.getOffsetForHorizontal(line, x);
final URLSpan[] links = buffer.getSpans(off, off, URLSpan.class);
if (links.length != 0) {
String url = decodeURL(links[0].getURL());
handler.onUrlClick(url);
return true;
}
}
return super.onTouchEvent(widget, buffer, event);
}
项目:twicalico
文件:TwitterStringUtils.java
public static Spanned convertUrlSpanToCustomTabs(Spanned spanned, Context context){
SpannableStringBuilder builder = new SpannableStringBuilder(spanned);
URLSpan[] spans = spanned.getSpans(0, spanned.length(), URLSpan.class);
for (URLSpan span : spans) {
builder.removeSpan(span);
builder.setSpan(new ClickableSpan() {
@Override
public void onClick(View view) {
new CustomTabsIntent.Builder()
.setToolbarColor(ContextCompat.getColor(context, R.color.colorPrimary))
.setSecondaryToolbarColor(ContextCompat.getColor(context, R.color.colorPrimaryDark))
.addDefaultShareMenuItem()
.build()
.launchUrl(context, Uri.parse(span.getURL()));
}
}, spanned.getSpanStart(span), spanned.getSpanEnd(span), spanned.getSpanFlags(span));
}
return builder;
}
项目:e621-android
文件:MiscStatics.java
public static 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) {
// Do something with span.getURL() to handle the link click...
/*if (span.getURL().startsWith("baseURL")) {
//TODO stay in app
} else */
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(span.getURL()));
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); //running from 'outside' and activity
view.getContext().getApplicationContext().startActivity(intent);
}
};
strBuilder.setSpan(clickable, start, end, flags);
strBuilder.removeSpan(span);
}
项目:materialup
文件:HtmlUtils.java
/**
* Parse the given input using {@link TouchableUrlSpan}s
* rather than vanilla {@link URLSpan}s so that they respond to touch.
*
* @param input
* @param linkTextColor
* @param linkHighlightColor
* @return
*/
public static Spanned parseHtml(String input,
ColorStateList linkTextColor,
@ColorInt int linkHighlightColor) {
SpannableStringBuilder spanned = (SpannableStringBuilder) Html.fromHtml(input);
// strip any trailing newlines
while (spanned.charAt(spanned.length() - 1) == '\n') {
spanned = spanned.delete(spanned.length() - 1, spanned.length());
}
URLSpan[] urlSpans = spanned.getSpans(0, spanned.length(), URLSpan.class);
for (URLSpan urlSpan : urlSpans) {
int start = spanned.getSpanStart(urlSpan);
int end = spanned.getSpanEnd(urlSpan);
spanned.removeSpan(urlSpan);
// spanned.subSequence(start, start + 1) == "@" TODO send to our own user activity...
// when i've written it
spanned.setSpan(new TouchableUrlSpan(urlSpan.getURL(), linkTextColor,
linkHighlightColor), start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
}
return spanned;
}
项目:H-Viewer
文件:HtmlContentParser.java
private static void setLinkClickable(Context context, final SpannableStringBuilder clickableHtmlBuilder,
final URLSpan urlSpan, String sourceUrl) {
int start = clickableHtmlBuilder.getSpanStart(urlSpan);
int end = clickableHtmlBuilder.getSpanEnd(urlSpan);
int flags = clickableHtmlBuilder.getSpanFlags(urlSpan);
ClickableSpan clickableSpan = new ClickableSpan() {
public void onClick(View view) {
Intent intent = new Intent();
intent.setAction("android.intent.action.VIEW");
String url = urlSpan.getURL();
url = TextUtils.isEmpty(url) ? "" : RegexValidateUtil.getAbsoluteUrlFromRelative(url, sourceUrl);
intent.setData(Uri.parse(url));
context.startActivity(intent);
}
};
clickableHtmlBuilder.setSpan(clickableSpan, start, end, flags);
}
项目:memoir
文件:ConverterSpannedToHtml.java
private void handleEndTag(CharacterStyle style) {
if (style instanceof URLSpan) {
mOut.append("</a>");
} else if (style instanceof TypefaceSpan) {
mOut.append("</font>");
} else if (style instanceof ForegroundColorSpan) {
mOut.append("</font>");
} else if (style instanceof BackgroundColorSpan) {
mOut.append("</font>");
} else if (style instanceof AbsoluteSizeSpan) {
mOut.append("</font>");
} else if (style instanceof StrikethroughSpan) {
mOut.append("</strike>");
} else if (style instanceof SubscriptSpan) {
mOut.append("</sub>");
} else if (style instanceof SuperscriptSpan) {
mOut.append("</sup>");
} else if (style instanceof UnderlineSpan) {
mOut.append("</u>");
} else if (style instanceof BoldSpan) {
mOut.append("</b>");
} else if (style instanceof ItalicSpan) {
mOut.append("</i>");
}
}
项目:AyoSunny
文件:HtmlHandler.java
private static void endA(SpannableStringBuilder text) {
int len = text.length();
Object obj = getLast(text, Href.class);
int where = text.getSpanStart(obj);
text.removeSpan(obj);
if (where != len) {
Href h = (Href) obj;
if (h.mHref != null) {
text.setSpan(new URLSpan(h.mHref), where, len,
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}
}
}
项目:BigApp_Discuz_Android
文件:AdapterActManage.java
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);
}
项目:S1-Next
文件:PostViewModel.java
private CharSequence getPostFloor() {
Post p = post.get();
if (p == null) {
return null;
}
String text = "#" + p.getCount();
Spannable spannable = new SpannableString(text);
URLSpan urlSpan = new URLSpan(StringUtils.EMPTY) {
@Override
public void onClick(@NonNull View widget) {
showFloorActionMenu(widget);
}
};
spannable.setSpan(urlSpan, 0, spannable.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
return spannable;
}
项目:AyoSunny
文件:HtmlTagHandler.java
private static void endA(SpannableStringBuilder text) {
int len = text.length();
Object obj = getLast(text, Href.class);
int where = text.getSpanStart(obj);
text.removeSpan(obj);
if (where != len) {
Href h = (Href) obj;
if (h.mHref != null) {
text.setSpan(new URLSpan(h.mHref), where, len,
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}
}
}
项目:Amumu
文件:HtmlUtils.java
private static SpannableStringBuilder linkifyPlainLinks(CharSequence input,
ColorStateList linkTextColor,
@ColorInt int linkHighlightColor) {
final SpannableString plainLinks = new SpannableString(input); // copy of input
Linkify.addLinks(plainLinks, Linkify.WEB_URLS);
final URLSpan[] urlSpans = plainLinks.getSpans(0, plainLinks.length(), URLSpan.class);
// add any plain links to the output
final SpannableStringBuilder ssb = new SpannableStringBuilder(input);
for (URLSpan urlSpan : urlSpans) {
ssb.setSpan(new TouchableUrlSpan(urlSpan.getURL(), linkTextColor, linkHighlightColor),
plainLinks.getSpanStart(urlSpan),
plainLinks.getSpanEnd(urlSpan),
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
}
return ssb;
}
项目:DoneForAndroid
文件:TaskListAdapter.java
private Spannable formatForTextView(Spannable p_Text) {
URLSpan[] spans = p_Text.getSpans(0, p_Text.length(), URLSpan.class);
Pattern hashTagURLPattern = Pattern.compile(".*\\/\\#tags\\/.*", Pattern.CASE_INSENSITIVE);
Matcher hashtagMatcher = null;
for (URLSpan span : spans) {
hashtagMatcher = hashTagURLPattern.matcher(span.getURL());
// Only format if it's a hashtag link
if (hashtagMatcher.find()) {
int start = p_Text.getSpanStart(span);
int end = p_Text.getSpanEnd(span);
p_Text.removeSpan(span);
span = new URLSpanNoUnderline(span.getURL());
p_Text.setSpan(span, start, end, 0);
}
}
return p_Text;
}
项目:DoneForAndroid
文件:TaskDetailsFragment.java
private Spannable formatForTextView(Spannable p_Text) {
URLSpan[] spans = p_Text.getSpans(0, p_Text.length(), URLSpan.class);
Pattern hashTagURLPattern = Pattern.compile(".*\\/\\#tags\\/.*", Pattern.CASE_INSENSITIVE);
Matcher hashtagMatcher = null;
for (URLSpan span : spans) {
hashtagMatcher = hashTagURLPattern.matcher(span.getURL());
// Only format if it's a hashtag link
if (hashtagMatcher.find()) {
int start = p_Text.getSpanStart(span);
int end = p_Text.getSpanEnd(span);
p_Text.removeSpan(span);
span = new URLSpanNoUnderline(span.getURL());
p_Text.setSpan(span, start, end, 0);
}
}
return p_Text;
}
项目:RichEditText
文件:HtmlToSpannedConverter.java
private static void endA(SpannableStringBuilder text)
{
int len = text.length();
Object obj = getLast(text, Href.class);
int where = text.getSpanStart(obj);
text.removeSpan(obj);
if (where != len) {
Href h = (Href) obj;
if (h == null) {
Log.e("endA", "h = null");
return;
}
if (h.mHref != null) {
text.setSpan(new URLSpan(h.mHref), where, len,
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}
}
}
项目:HashGirl
文件:HashGirl.java
private SpannableString wrapIntoHashGirlURLSpan(String htmlText, final OnClickHashListener onClickHashListener) {
SpannableString s = SpannableString.valueOf(Html.fromHtml(htmlText));
URLSpan[] urlSpanList = s.getSpans(0, s.length(), URLSpan.class);
for(URLSpan urlSpan : urlSpanList) {
int start = s.getSpanStart(urlSpan);
int end = s.getSpanEnd(urlSpan);
s.removeSpan(urlSpan);
HashGirlURLSpan hashGirlURLSpan = new HashGirlURLSpan(urlSpan.getURL(), new OnClickHashListener() {
@Override
public void onClickHash(String url) {
if(onClickHashListener != null) {
onClickHashListener.onClickHash(url);
}
}
});
hashGirlURLSpan.setUnderline(underline);
hashGirlURLSpan.setStrike(strike);
hashGirlURLSpan.setColor(color);
hashGirlURLSpan.setBgcolor(bgcolor);
hashGirlURLSpan.setAlpha(alpha);
s.setSpan(hashGirlURLSpan, start, end, 0);
}
return s;
}