我知道如何在android中使用EditText以及如何在android中使用AutoComplete EditText。但是自动完成EditText的使用方式类似于下拉列表,用户可以在其中输入字符并显示建议,并且用户单击其中一个建议。如果没有任何建议,那么它将不会显示任何文字。
我的要求是,考虑有一个EditText。用户可以输入他们想要的任何内容,但是当单词从特殊字符(例如“@”)开始时,api将会点击并显示建议。
完整示例:
“我的名字是詹姆斯邦德,我是@And”
在上面的示例中,当用户在末尾“@And”键入此句子时,它将显示来自命中API的自动建议(应显示Android),用户可以从列表中选择此建议的单词。
有没有办法实现这个目标?
请帮助我。
谢谢。
答案 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