在EditText之间如何使用自动完成android

时间:2016-01-13 03:13:18

标签: android autocomplete android-edittext

我知道如何在android中使用EditText以及如何在android中使用AutoComplete EditText。但是自动完成EditText的使用方式类似于下拉列表,用户可以在其中输入字符并显示建议,并且用户单击其中一个建议。如果没有任何建议,那么它将不会显示任何文字。

我的要求是,考虑有一个EditText。用户可以输入他们想要的任何内容,但是当单词从特殊字符(例如“@”)开始时,api将会点击并显示建议。

完整示例:

“我的名字是詹姆斯邦德,我是@And”

在上面的示例中,当用户在末尾“@And”键入此句子时,它将显示来自命中API的自动建议(应显示Android),用户可以从列表中选择此建议的单词。

有没有办法实现这个目标?

请帮助我。

谢谢。

1 个答案:

答案 0 :(得分:1)

Android提供MultiAutoCompleteTextView。使用此小部件而不是EditText并覆盖其标记化器。

MultiAutoCompleteTextView myautocomplete = (MultiAutoCompleteTextView) findViewById(R.id.multy);
    ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, array_for_autocomplete);
    myautocomplete.setAdapter(adapter);

    myautocomplete.setTokenizer(new MultiAutoCompleteTextView.Tokenizer() {
        @Override
        public int findTokenStart(CharSequence text, int cursor) {
            int i = cursor;

            while (i > 0 && text.charAt(i - 1) != '@') {
                i--;
            }
            while (i < cursor && text.charAt(i) == ' ') {
                i++;
            }

            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;
        }

        @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 + ", ";
                }
            }
        }
    });

文档:http://developer.android.com/reference/android/widget/MultiAutoCompleteTextView.html