Android AutoCompleteTextView带有“@”提到过滤功能,类似于Twitter和Facebook。

7
我有一个需求,需要实现一个编辑文本框,用户可以输入任何内容,但当他们输入以“@”开头的新单词时,自动完成应该开始显示潜在的用户。
我知道如何使用AutoCompleteTextView函数进行过滤,但我不确定如何捕获“@”符号后最后一个单词中的字符(忽略任何先前的单词)。
因此,当用户从AutoCompleteTextView列表中被选中时,它应该用“@”替换该单词,例如。

这是一条信息给@steve


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

这是给史蒂夫的信息


我还需要以一种可发送到服务器的形式获取字符串。例如,从上面的示例中,我需要发送以下字符串:
"This is a message for [用户名: steve@bloggs.com,ID:44]."

我看了一下https://github.com/splitwise/TokenAutoComplete,它似乎非常适合在列表中输入电子邮件,但我不知道如何将其适应我的需求。请注意,我需要支持多个/重复提到的人:

例如


这是一条给 SteveBob 的信息。这是针对 Bob 的信息的第二个句子。
如果有人知道或已经做过类似的事情,真的非常感谢!
2个回答

6
我最终使用了来自领英的Spyglass库,它正好符合我的要求。它提供了一个MentionsEditText(可自定义)。我还使用了ListPopupWindow,在列表中显示建议(类似于AutoCompleteTextView)。
这是链接... https://github.com/linkedin/Spyglass

1
你如何获得以下格式的字符串?:"这是一条消息给[用户名:steve@bloggs.com,ID:44]。" - Ana Llera
1
@FlashAsh99,你能告诉我在使用Spyglass后如何替换文本吗? - bala
@FlashAsh99 我也想知道你是如何用望远镜替换文本的。 - ranjitzade
@FlashAsh99:目前,git中的代码从原始文件获取用户/城市日期。有没有办法为此加载动态数组? - Manu
回答 @AnaLlera 的问题? - neobie
我也使用了同样的库。但在我的情况下,编辑文本位于底部。弹出窗口覆盖了键盘。 - Raghunandan

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替换文本。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接