在编辑文本之间如何使用自动完成android
我知道如何在android中使用EditText,以及如何在android中使用自动完成EditText。但AutoCompleteEditText的使用类似于下拉列表,用户在其中键入字符并显示建议,用户单击其中一个建议。如果没有建议,则不会显示任何文本 我的要求是,考虑一下有一个编辑文本。用户可以键入他们想要的任何内容,但当单词以特殊字符(例如“@”)开头时,api将点击并显示建议 完整示例: “我叫詹姆斯·邦德,我是@和” 在上面的例子中,当用户在“@和”结尾键入这句话时,它将显示点击API的自动建议(应该显示Android),用户可以从列表中选择这个建议的单词 有没有办法做到这一点 请帮帮我在编辑文本之间如何使用自动完成android,android,autocomplete,android-edittext,Android,Autocomplete,Android Edittext,我知道如何在android中使用EditText,以及如何在android中使用自动完成EditText。但AutoCompleteEditText的使用类似于下拉列表,用户在其中键入字符并显示建议,用户单击其中一个建议。如果没有建议,则不会显示任何文本 我的要求是,考虑一下有一个编辑文本。用户可以键入他们想要的任何内容,但当单词以特殊字符(例如“@”)开头时,api将点击并显示建议 完整示例: “我叫詹姆斯·邦德,我是@和” 在上面的例子中,当用户在“@和”结尾键入这句话时,它将显示点击API
谢谢。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 + ", ";
}
}
}
});
MultiAutoCompleteTextView myautocomplete=(MultiAutoCompleteTextView)findViewById(R.id.multy);
ArrayAdapter=新的ArrayAdapter(这是android.R.layout.simple\u list\u item\u 1,用于自动完成的数组);
myautocomplete.setAdapter(适配器);
myautocomplete.setTokenizer(新的MultiAutoCompleteTextView.Tokenizer(){
@凌驾
公共int findTokenStart(字符序列文本,int游标){
int i=光标;
而(i>0&&text.charAt(i-1)!='@')){
我--;
}
而(i0&&text.charAt(i-1)=''){
我--;
}
如果(i>0&&text.charAt(i-1)=','){
返回文本;
}否则{
if(已跨越的文本实例){
SpannableString sp=新的SpannableString(文本+“,”);
TextUtils.copySpansFrom((跨距)text,0,text.length(),
对象类,sp,0);
返回sp;
}否则{
返回文本+“,”;
}
}
}
});
文档:在AutoCompleteTextView中没有setTokenizer()方法使用
MultiAutoCompleteTextView
和重写方法。它确实有setTokenizer()方法。不,这不是我问题的解决方案。我更新了我的答案,这次我亲自测试了它。它工作得很好。完整的工作代码。这实际上很好,我可以在从建议中选择后删除@吗???应仅显示选定的建议。