在“@”上触发的AutoCompleteTextView

时间:2015-01-23 23:04:23

标签: android autocomplete android-edittext textview chatroom

我正在制作一个聊天室Android应用程序,我有一个用户列表,当有一个" @"我希望在文本视图中自动完成。类型。

因此,当用户键入@时,我希望房间中的用户下拉,但只有在键入@时才会显示。

我该怎么做?即使不使用AutoCompleteTextView

,任何解决方案都会有所帮助

1 个答案:

答案 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 + " ";
            }
        }
    }
}