package com.yuyh.sprintnba.utils; import android.text.SpannableString; import android.text.Spanned; import android.text.util.Linkify; import com.yuyh.sprintnba.app.Constant; import java.util.regex.Pattern; /** * Created by liuz on 16/6/7. */ public class TimeLineUtility { private static final String TAG = "TimeLineUtility"; private static String mColor = Constant.SPAN_LINK_COLOR; public static void setSpanColor(String color) { mColor = color; } private TimeLineUtility() { } public enum TimeLineStatus { LINK, FEED } public static SpannableString convertNormalStringToSpannableString(String txt, TimeLineStatus status) { String hackTxt; if (txt.startsWith("[") && txt.endsWith("]")) { hackTxt = txt + " "; } else { hackTxt = txt; } SpannableString value = SpannableString.valueOf(hackTxt); switch (status) { case LINK: { Linkify.addLinks(value, LinkPatterns.WEB_URL, LinkPatterns.WEB_SCHEME); } break; case FEED: { Linkify.addLinks(value, LinkPatterns.WEB_URL, LinkPatterns.WEB_SCHEME); Linkify.addLinks(value, LinkPatterns.TOPIC_URL, LinkPatterns.TOPIC_SCHEME); Linkify.addLinks(value, LinkPatterns.MENTION_URL, LinkPatterns.MENTION_SCHEME); } break; } android.text.style.URLSpan[] urlSpans = value.getSpans(0, value.length(), android.text.style.URLSpan.class); URLSpan weiboSpan; for (android.text.style.URLSpan urlSpan : urlSpans) { if (urlSpan.getURL().startsWith(LinkPatterns.TOPIC_SCHEME)) { String topic = urlSpan.getURL().substring(LinkPatterns.TOPIC_SCHEME.length(), urlSpan.getURL().length()); //不识别空格话题和大于30字话题 String group = topic.substring(1, topic.length() - 1).trim(); if (1 > group.length() || group.length() > 30) { value.removeSpan(urlSpan); continue; } } weiboSpan = new URLSpan(urlSpan.getURL(), mColor); int start = value.getSpanStart(urlSpan); int end = value.getSpanEnd(urlSpan); value.removeSpan(urlSpan); value.setSpan(weiboSpan, start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); } return value; } public static class LinkPatterns { public static final Pattern WEB_URL = Pattern .compile("(((http|https)://)|((?<!((http|https)://))www\\.))" + ".*?" + "(?=( |[\\u4e00-\\u9fa5]|\\s| |<br />|$|[<>]))"); public static final Pattern TOPIC_URL = Pattern .compile("#[\\p{Print}\\p{InCJKUnifiedIdeographs}&&[^#]]+#"); public static final Pattern MENTION_URL = Pattern .compile("@[\u4e00-\u9fa5a-zA-Z0-9_-·\\.]+[\u200B]"); public static final String WEB_SCHEME = "http://"; public static final String TOPIC_SCHEME = "com.zheblog.weibo.topic://"; public static final String MENTION_SCHEME = "com.zheblog.weibo.at://"; public static final String WEB_COMPARE_HTTP = "http"; public static final String WEB_COMPARE_HTTPS = "https"; public static final String TOPIC_COMPARE_SCHEME = "com.zheblog.weibo.topic"; public static final String MENTION_COMPARE_SCHEME = "com.zheblog.weibo.at"; } }