Подтвердить что ты не робот

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

У меня есть AutoCompleteTextView в моем приложении. Приложение использует SDK для Facebook. Я следил за кодом из этого вопроса на SO: qaru.site/info/180932/... до точки и выполнял активную операцию поиска (фильтрации).

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

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

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

4b9b3361

Ответ 1

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

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

final MultiAutoCompleteTextView inputEditText = (MultiAutoCompleteTextView) dialog.findViewById(R.id.MyEditText);

String[] COUNTRIES = new String[] { "Belgium", "France", "Italy", "Germany", "Spain" };
ArrayAdapter<String> adapter = new ArrayAdapter<String>(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.

Ответ 2

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

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

Функции

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