6

我需要实现用户可以输入任何内容的编辑文本,但是当他们输入以“@”开头的新单词时,自动完成应该开始显示潜在用户。

我了解如何使用 AutoCompleteTextView 功能进行过滤。但我不确定如何从“@”符号之后的最后一个单词中捕获字符(忽略任何前面的单词)。

因此,当从 AutoCompleteTextView 列表中选择了用户时,它应该用“@”替换单词,例如。


“这是给@steve 的消息”


当用户从列表中单击“Steve”时,文本应替换为:


“这是给史蒂夫的信息”


我还需要以可以发送到服务器的形式获取字符串。即从上面的例子中,我需要发送字符串:


“这是给 [username:steve@bloggs.com, id:44] 的消息。”


我看过https://github.com/splitwise/TokenAutoComplete

这对于在列表中输入电子邮件似乎很棒,但我不确定如何满足我的需要。请记住,我需要支持多次/重复提及:

例如


“这是给史蒂夫鲍勃的信息。这是给鲍勃的信息中的第二句话”


如果有人知道或做过类似的事情,将不胜感激!

4

2 回答 2

6

我最终使用了来自linkedin 的spyglass 库,它完全符合我的要求。它提供了一个 MentionsEditText(可以自定义)。我还使用 ListPopupWindow 在列表中显示建议(如 AutoCompleteTextView)。

链接在这里...

https://github.com/linkedin/Spyglass

于 2015-09-16T15:03:52.443 回答
4

以下方法将提取以“@”开头的单词:

private void parseText(String text) {
    String[] words = text.split("[ \\.]");
    for (int i = 0; i < words.length; i++) {
        if (words[i].length() > 0
                && words[i].charAt(0) == '@') {
            System.out.println(words[i]);
        }
    }
}

一旦你有了单词,使用你的自动完成过滤器,最后使用 String.replace 替换文本。

于 2015-09-13T15:11:11.997 回答