Android: Autocomplete TextView похож на приложение Facebook
У меня есть AutoCompleteTextView в моем приложении. Приложение использует SDK для Facebook. Я следил за кодом из этого вопроса на SO: https://stackoverflow.com/a/12363961/450534 до точки и выполнял функцию поиска (фильтрации).
Теперь, как мне получить встроенный автозаполнение, например, приложение Facebook после ввода символа @ и по-прежнему удерживать другой текст, введенный пользователем? Эта операция предназначена для обновления статуса и может содержать друзей пользователя вместе с другим текстом. AutoCompleteTextView
или EditText
, естественно, будет многострочным. Для обновления статуса вы видите.
Я знаю, что из-за отсутствия какого-либо кода в этом посте я рискую оказаться заниженным или, возможно, даже закрыв вопрос. Но это действительно стандартный код фильтрации плиты котла.
- Добавление onclicklistener в listview (android)
- Добавление кнопки в список в WinForms
- Android: Как обнаружить двойное касание?
- Нажмите, чтобы показать изображение в ImageView
- Android listview с проблемой флажка
EDIT: приложение FriendCaster для Android также делает то же самое.
- CardView не показывает Shadow в Android L
- Изменить фон списка ListView - странное поведение
- как отображать извлеченные данные json в listview с использованием baseadapter
- Внедрение onScrollListener для обнаружения конца прокрутки в ListView
- EditText в Listview теряет фокус при нажатии на Android 4.x
- Buggy ListView меня огорчает
- c # мерцающий список в обновлении
- Как изменить цвет элементов ListView в фокусе и щелчке
Сначала сделайте свой 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.