How to replace the comma with a space when I use the "MultiAutoCompleteTextView"
I'm doing a simple program using MultiAutoCompleteTextView
to prompt the com开发者_运维问答mon words when I input several letters.
code:
ArrayAdapter<String> adapter = new ArrayAdapter<String>(
this,
android.R.layout.simple_dropdown_item_1line,
ary);
MultiAutoCompleteTextView textView = (MultiAutoCompleteTextView) findViewById(R.id.editText);
textView.setAdapter(adapter);
textView.setTokenizer(new MultiAutoCompleteTextView.CommaTokenizer());
private String[] ary = new String[] {
"abc",
"abcd",
"abcde",
"abcdef",
"abcdefg",
"hij",
"hijk",
"hijkl",
"hijklm",
"hijklmn",
};
Now,when I input 'a' and choose "abcd" but the result become to "abcd,". How to replace the comma with a space?
Thank you!
public class SpaceTokenizer implements Tokenizer {
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;
}
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;
}
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 + " ";
}
}
}
}
The way to do it would be to implement your own Tokenizer. The reason the comma comes up is because you're using CommaTokenizer, which is designed to do exactly that. You can also look at the source code for CommaTokenizer if you need a reference for how to implement your own SpaceTokenizer.
Check my question/answer
How to replace MultiAutoCompleteTextView drop down list
you will find a SpaceTokenizer class
I have used Kotlin for a white space tokenizer. This also caters tabs, trailing spaces and line feeds.
object : Tokenizer {
override fun findTokenStart(text: CharSequence, cursor: Int): Int {
val spaceIndex = text.indexOfFirst { Character.isWhitespace(it) }
return if (spaceIndex > cursor)
spaceIndex
else cursor
}
override fun findTokenEnd(text: CharSequence, cursor: Int): Int {
val lastSpaceIndex = text.indexOfLast { Character.isWhitespace(it) }
return if (lastSpaceIndex > cursor)
lastSpaceIndex
else cursor
}
override fun terminateToken(text: CharSequence): CharSequence {
val i = text.length
return if (i > 0 && text[i - 1] == ' ') {
text
} else {
if (text is Spanned) {
val sp = SpannableString("$text ")
TextUtils.copySpansFrom(
text as Spanned?, 0, text.length,
Any::class.java, sp, 0
)
sp
} else {
"$text "
}
}
}
}
精彩评论