gpt4 book ai didi

android - 使用两个 Linkify 和可点击的网络链接的一个 TextView 的文本颜色

转载 作者:太空狗 更新时间:2023-10-29 16:16:09 26 4
gpt4 key购买 nike

如果任何推文包含任何网络链接,我希望推特提及是红色的,主题标签是另一种颜色。链接应该是可点击的,并通过 Intent 传递给另一个 Activity (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"));

enter image description here

最佳答案

最后,我使用 android sdk SpannableString 和它的 ClickableSpan 实现了可点击的主题标签网络链接,并通过保持不同的颜色使它们非常有吸引力

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


}

NonUnderlinedClickableSpan

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

关于android - 使用两个 Linkify 和可点击的网络链接的一个 TextView 的文本颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27146017/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com