我知道如何在 android 中使用 EditText 以及如何在 android 中使用 AutoComplete EditText。但是 AutoComplete EditText 的用法类似于下拉列表,用户在其中键入一个字符,将显示建议,用户单击其中一个建议。如果没有建议,则不会显示任何文本。
我的要求是,考虑有一个 EditText。用户可以键入他们想要的任何内容,但是当单词以特殊字符(例如“@”)开头时,api 将命中并显示建议。
完整示例:
“我叫詹姆斯·邦德,我是@And”
在上面的例子中,当用户在“@And”末尾输入这句话时,它会显示来自点击 API 的自动建议(应该显示 Android),用户可以从列表中选择这个建议的词。
有什么办法可以实现吗?
请帮帮我。
谢谢。
最佳答案
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
关于android - 在EditText之间如何使用自动完成android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34757789/