2

我想在 EditText 中更改用户输入的字符。事实上我想当用户输入编辑文本时,如果输入字符是“S”,用“B”字符替换它。我想实时执行此操作。

4

3 回答 3

7

我想在 EditText 中更改用户输入的字符。事实上我想当用户输入编辑文本时,如果输入字符是“S”,用“B”字符替换它。我想实时执行此操作。

很可能您需要使用TextWatcher它为您的目标指定的,并允许您实时操作 EditText 的内容。

例子:

edittext.addTextChangedListener(new TextWatcher() {

    public void onTextChanged(CharSequence s, int start, int before, int count) {           

    }

    public void beforeTextChanged(CharSequence s, int start, int count, int after) {    

    }

    public void afterTextChanged(Editable s) {

    }
});
于 2013-03-26T13:50:51.123 回答
2

就像 Sajmon 解释的那样,您必须实现一个 TextWatcher。您必须注意光标。因为用户可以在现有文本字符串的任何位置输入下一个字符(或剪贴板中的序列)。要处理此问题,您必须更改正确位置的字符(不要替换整个文本):

        damageEditLongText.addTextChangedListener(new TextWatcher() {

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {}

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {}

        @Override
        public void afterTextChanged(Editable s) {
            // Nothing to replace
            if (s.length() == 0)
                return;

            // Replace 'S' by 'B'
            String text = s.toString();
            if (Pattern.matches(".*S.*", text)) {
                int pos = text.indexOf("S");
                s.replace(pos, pos + 1, "B");
            }
        }
    });
于 2016-03-04T13:52:23.647 回答
0

利用

EditText textField = findViewById(R.id.textField);
String text = textField.getText().toString();

那么你可以使用

text.replace('b','s');

其次是

textField.setText(text,TextView.BufferType);

TextView.BufferType 可以有 3 个值,如此处所述

于 2013-03-26T13:51:51.140 回答