开发者

How to replace the comma with a space when I use the "MultiAutoCompleteTextView"

开发者 https://www.devze.com 2023-01-11 07:47 出处:网络
I\'m doing a simple program using MultiAutoCompleteTextView to prompt the com开发者_运维问答mon words when I input several letters.

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

        }
0

精彩评论

暂无评论...
验证码 换一张
取 消