Android: Autocomplete TextView похож на приложение Facebook

У меня есть AutoCompleteTextView в моем приложении. Приложение использует SDK для Facebook. Я следил за кодом из этого вопроса на SO: https://stackoverflow.com/a/12363961/450534 до точки и выполнял функцию поиска (фильтрации).

Теперь, как мне получить встроенный автозаполнение, например, приложение Facebook после ввода символа @ и по-прежнему удерживать другой текст, введенный пользователем? Эта операция предназначена для обновления статуса и может содержать друзей пользователя вместе с другим текстом. AutoCompleteTextView или EditText , естественно, будет многострочным. Для обновления статуса вы видите.

Я знаю, что из-за отсутствия какого-либо кода в этом посте я рискую оказаться заниженным или, возможно, даже закрыв вопрос. Но это действительно стандартный код фильтрации плиты котла.

EDIT: приложение FriendCaster для Android также делает то же самое.

Сначала сделайте свой EditText в MultiAutoCompleteTextView. MultiAutoCompleteTextView позволяет вам заменять определенные части текста, например текст после «@».

Вы можете сделать что-то вроде этого:

 final MultiAutoCompleteTextView inputEditText = (MultiAutoCompleteTextView) dialog.findViewById(R.id.MyEditText); String[] COUNTRIES = new String[] { "Belgium", "France", "Italy", "Germany", "Spain" }; ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_dropdown_item_1line, COUNTRIES); inputEditText.setAdapter(adapter); inputEditText.setThreshold(1); //Set number of characters before the dropdown should be shown //Create a new Tokenizer which will get text after '@' and terminate on ' ' inputEditText.setTokenizer(new Tokenizer() { @Override public CharSequence terminateToken(CharSequence text) { int i = text.length(); while (i > 0 && text.charAt(i - 1) == ' ') { i--; } if (i > 0 && text.charAt(i - 1) == ' ') { return text; } else { if (text instanceof Spanned) { SpannableString sp = new SpannableString(text + " "); TextUtils.copySpansFrom((Spanned) text, 0, text.length(), Object.class, sp, 0); return sp; } else { return text + " "; } } } @Override public int findTokenStart(CharSequence text, int cursor) { int i = cursor; while (i > 0 && text.charAt(i - 1) != '@') { i--; } //Check if token really started with @, else we don't have a valid token if (i < 1 || text.charAt(i - 1) != '@') { return cursor; } return i; } @Override public int findTokenEnd(CharSequence text, int cursor) { int i = cursor; int len = text.length(); while (i < len) { if (text.charAt(i) == ' ') { return i; } else { i++; } } return len; } }); 

Одна из проблем заключается в том, что всплывающее окно появится под представлением EditText. Чтобы переместить его и поместить его под текстом, который в настоящее время написан, вы можете сделать что-то вроде этого:

 inputEditText.addTextChangedListener(new TextWatcher() { @Override public void onTextChanged(CharSequence s, int start, int before, int count) { Layout layout = inputEditText.getLayout(); int pos = inputEditText.getSelectionStart(); int line = layout.getLineForOffset(pos); int baseline = layout.getLineBaseline(line); int bottom = inputEditText.getHeight(); inputEditText.setDropDownVerticalOffset(baseline - bottom); } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void afterTextChanged(Editable s) { } }); 

Примечание. В настоящее время это не занимает позицию выпадающего списка в случае, если в редакторе больше строк, чем может показать edittext.

https://github.com/dhaval001/linkable_text_view.git

Простой способ создания текста ссылки, например, имя_пользователя или #hashtag, в Android TextView и EditText с текстовым представлением multiautocomplete. ссылка facebook и instagram

Особенности

Совпадение одиночных строк или шаблона регулярных выражений для установки ссылок. Изменение цвета связанного текста. Установите стиль связанного текста: BOLD, ITALIC или BOLD_ITALIC. Установите подчеркнутый связанный текст. Укажите действия нажатия определенного слова. OnTextChangedListener прослушиватель для LinkableEditText.

  • Android: как отключить элементы списка при создании списка
  • выделение выделенного элемента в списке в андроиде
  • Android ListView не обновляется после notifyDataSetChanged
  • Просмотр списка фильтров Android
  • Как перекрыть элементы в LinearLayoutManager - RecyclerView (например, карты укладки)
  • Ограничение высоты ListView на Android
  • ListView getChildAt возвращает null для видимых детей
  • Передача списка из одной активности в другую
  • Android: как измерить общую высоту ListView
  • Android-колонка «_id» не существует?
  • Изменить цвет текста ListView
  • Interesting Posts

    Firefox помнит пароль для одного сайта

    Можно ли преобразовать обратный iterator в форвардный iterator?

    Запланированное и повторяющееся письмо в Outlook?

    Могу ли я появиться в Specific ViewController?

    Беспроводной маршрутизатор, поддерживающий Bonjour между проводными и беспроводными устройствами

    можно открыть приложение «Настройки» с помощью openURL?

    android лучший и безопасный способ остановить stream

    Как определить ширину экрана в терминах dp или dip во время выполнения в Android?

    Какая лучшая панель задач GNU, которую вы использовали / видели?

    Что такое лямбды типа Scala и каковы их преимущества?

    Неужели мой жесткий диск неисправен?

    Как конвертировать веб-страницу в PDF-файл?

    Как создать контекстное меню для RecyclerView

    Как установить программу или приложение по умолчанию для обработки определенного типа файла или протокола URL?

    Как восстановить удаленный файл docx?

    Давайте будем гением компьютера.