Android AutoCompleteTextView с символом "@" упоминает фильтрацию как твиттер и фейсбук
У меня есть требование для реализации текста редактирования, который пользователь может вводить в тексте что угодно, но когда они вводят новое слово, начинающееся с '@', автозаполнение должно показывать потенциальным пользователям.
Я понимаю, как использовать функцию AutoCompleteTextView для фильтрации. Но я не уверен, как сделать захват символов из последнего слова после символа "@" (игнорируя любые предыдущие слова).
Следовательно, когда пользователь был выбран из списка AutoCompleteTextView, он должен заменить слово на "@", например.
"Это сообщение для @steve"
когда пользователь нажимает на "Стив" из списка, текст должен заменить на:
"Это сообщение для Стива"
Мне также нужно получить строку в форме, которую я могу отправить на сервер. то есть из приведенного выше примера мне нужно было бы отправить строку:
"Это сообщение для [username:steve@bloggs.com, id:44]."
Я посмотрел на https://github.com/splitwise/TokenAutoComplete
Который кажется большим для того, чтобы напечатать электронные письма в списке, но я не уверен, как обслужить это для моих потребностей. Не берите в голову, мне нужно поддержать несколько / повторяющихся упоминаний:
например
"Это сообщение для Стива и Боба. Это второе предложение в сообщении для Боба"
Если кто-то знает или сделал что-то подобное, был бы очень признателен!
2 ответа
В итоге я использовал библиотеку spyglass из linkedin, которая делает именно то, что я искал. Он предоставляет MentionsEditText (который можно настроить). Я также использовал ListPopupWindow, чтобы показать предложения в списке (например, AutoCompleteTextView).
Вот ссылка...
Следующий метод извлекает слова, начинающиеся с "@":
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.