链接Android转换问题

时间:2011-06-20 19:01:35

标签: android textview transform linkify

尝试做一些相当简单的事情。

采取这样的文字

  

用户名:这是我正在发表的评论

它位于单个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);

出于某种原因,整个文本成为一个巨大的链接,文本根本没有被转换。

3 个答案:

答案 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时删除开始和结束模式...