我希望twitter提到的内容是红色的,如果tweet包含任何web链接,则标签是另一种颜色。链接应该可以点击并通过intent传递到另一个活动(WebView)。
我怎样才能做到这一点??

   TransformFilter filter = new TransformFilter() {
                public final String transformUrl(final Matcher match, String url) {
                    return match.group();
                }
            };

            Pattern mentionPattern = Pattern.compile("@([A-Za-z0-9_-]+)");
            String mentionScheme = "http://www.twitter.com/";
            Linkify.addLinks(tvMessage, mentionPattern, mentionScheme, null, filter);


            Pattern hashtagPattern = Pattern.compile("#([A-Za-z0-9_-]+)");
            String hashtagScheme = "http://www.twitter.com/search/";
            Linkify.addLinks(tvMessage, hashtagPattern, hashtagScheme, null, filter);

            Pattern urlPattern = Patterns.WEB_URL;
            Linkify.addLinks(tvMessage, urlPattern, null, null, filter);

 // tvMessage.setLinkTextColor(Color.parseColor("#3467BB"));

最佳答案

Finally i have achieved hashtags weblinks clickable and made them very attractive by keeping different colors使用android sdk spannablestring并可单击span。

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());


    }

非下划线ClickableSpan类
 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);
                }
            }
        }

08-27 15:47