Android AutoCompleteTextView с символом "@" упоминает фильтрацию как твиттер и фейсбук

У меня есть требование для реализации текста редактирования, который пользователь может вводить в тексте что угодно, но когда они вводят новое слово, начинающееся с '@', автозаполнение должно показывать потенциальным пользователям.

Я понимаю, как использовать функцию AutoCompleteTextView для фильтрации. Но я не уверен, как сделать захват символов из последнего слова после символа "@" (игнорируя любые предыдущие слова).

Следовательно, когда пользователь был выбран из списка AutoCompleteTextView, он должен заменить слово на "@", например.


"Это сообщение для @steve"


когда пользователь нажимает на "Стив" из списка, текст должен заменить на:


"Это сообщение для Стива"


Мне также нужно получить строку в форме, которую я могу отправить на сервер. то есть из приведенного выше примера мне нужно было бы отправить строку:


"Это сообщение для [username:steve@bloggs.com, id:44]."


Я посмотрел на https://github.com/splitwise/TokenAutoComplete

Который кажется большим для того, чтобы напечатать электронные письма в списке, но я не уверен, как обслужить это для моих потребностей. Не берите в голову, мне нужно поддержать несколько / повторяющихся упоминаний:

например


"Это сообщение для Стива и Боба. Это второе предложение в сообщении для Боба"


Если кто-то знает или сделал что-то подобное, был бы очень признателен!

2 ответа

Решение

В итоге я использовал библиотеку spyglass из linkedin, которая делает именно то, что я искал. Он предоставляет MentionsEditText (который можно настроить). Я также использовал ListPopupWindow, чтобы показать предложения в списке (например, AutoCompleteTextView).

Вот ссылка...

https://github.com/linkedin/Spyglass

Следующий метод извлекает слова, начинающиеся с "@":

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.

Другие вопросы по тегам