尝试做一些相当简单的事情。
采取这样的文字
用户名:这是我正在发表的评论
它位于单个TextView中。我想将用户名设为链接。我决定最简单的方法是用“$ @”包围用户名,这样它就变成了
“$ @用户名:$ @这是我正在发表的评论
这样我可以使用以下正则表达式
Pattern userName = Pattern.compile(".*\\$@(.+)\\$@.*");
使用Linkify并将其设为链接。但是,显然我需要删除分隔符,因此以下是代码
title.setText(titleText);
Linkify.TransformFilter transformer = new Linkify.TransformFilter() {
@Override
public String transformUrl(Matcher match, String url) {
return match.group(1);
}
};
Linkify.addLinks(title, userName, "content://user=", null, transformer);
出于某种原因,整个文本成为一个巨大的链接,文本根本没有被转换。
答案 0 :(得分:1)
用户名:这是我正在发表的评论
所以我最终使用了以下模式
Pattern userName = Pattern.compile("(.+:)");
非常简单,代码只是
title.setText(titleText);
Linkify.addLinks(title, GlobalUtil.userName, "user://" + userId + "/");
谢谢你的原始建议没有。我确实匹配整个字符串而不仅仅是userName这是链接。
答案 1 :(得分:0)
我最好的猜测是你正在使用的正则表达式是问题所在,你告诉它基本上挑选出匹配的整个字符串,包括你想要的所有内容。因此,TransformFilter
可能正在传递整个匹配的字符串。 transformUrl
据我所知,您希望返回URL,因此整个字符串都链接到第一个匹配组。
因此,考虑到这一点,将正则表达式更改为"\\$@(.+?)\\$@"
的某些内容可能符合您的最佳利益(在组中添加了?
以使匹配非贪婪)以避免匹配整个字符串,只是选择你想要URL-ize的位(因为没有更好的术语,加上-ize到单词听起来很酷)。
答案 2 :(得分:0)
为什么不将分隔符放在模式中进行更改?
Pattern userName = Pattern.compile(".*(\\$@.+\\$@).*");
然后更改转换过滤器以在更改为URL时删除开始和结束模式...