我正在制作一个聊天室Android应用程序,我有一个用户列表,当有一个" @"我希望在文本视图中自动完成。类型。
因此,当用户键入@时,我希望房间中的用户下拉,但只有在键入@时才会显示。
我该怎么做?即使不使用AutoCompleteTextView
,任何解决方案都会有所帮助答案 0 :(得分:1)
您正在寻找的是MultiAutocompleteTextView:http://developer.android.com/reference/android/widget/MultiAutoCompleteTextView.html
这是我用于同一目的的Tokenizer。我使用自定义Span来表示名为ProfileTagSpan的配置文件标记,这是必需的,因为我需要向用户显示配置文件名称,但将配置文件ID保存在字符串中。如果没有必要,你可能会更简单。
public class ProfileTagTokenizer implements MultiAutoCompleteTextView.Tokenizer {
/*
* Search back from cursor position looking for @ symbol
* If none found then cancel filtering by making the constraint length 0
* Also cancel if another tag found as tags can't overlap
*/
public int findTokenStart(CharSequence text, int cursor) {
for (int i = cursor; i > 0; i--) {
if (text.charAt(i - 1) == '@') return i;
else if (text instanceof Spanned &&
((Spanned) text).getSpans(i, i, ProfileTagSpan.class).length > 0) break;
}
return cursor;
}
/*
* Use the cursor position for token end as we have no delimiter on the tag
*/
public int findTokenEnd(CharSequence text, int cursor) {
return cursor;
}
/*
* Add a space after the tag
*/
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 + " ";
}
}
}
}