我有一个 editText ,你在里面写一些东西然后当你点击下一步时..你写的文本被写入另一个 editText ..
它完美地工作..
但我想用 textWatcher 来替换一些字母..

示例:如何使 S 为 $
或 O 为 @

更新:

    final EditText First = (EditText)findViewById(R.id.etFirst);
    String strFirst = First.getText().toString();
    final TextView done = (TextView)findViewById(R.id.tvName);
    String strDone = done.getText().toString();
    Button Trans = (Button) findViewById(R.id.bTrans);

        Trans.setOnClickListener(new View.OnClickListener() {

            public void onClick(View v) {
                //First EditText
                if (First.getText().toString().equals("John")) {
                    done.setText("JOHN");
                } else {
                if (First.getText().toString().equals("Ahmed")) {
                    done.setText("AHMED");
                } else  {
                done.setText(First.getText());
                                }
                            }
                        };
                    });

        First.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) {
            done.setText(First.getText().toString().replaceAll("S", "$"));
            }
            });

我的代码会将您在 EditText 中写的内容输入到下面的大 TextView .. 当我按下按钮 Trans 时,它​​会设置您写的文本,但我想将一些字母示例 S 替换为 $ .. 当我输入 S 时,没有任何 react 。 . 只是 S 它不会是 $ ..

我究竟做错了什么 ?

最佳答案

将 Textwatcher 分配给您的 editText 然后执行类似的操作

editText.setText(editText.getText().toString().replaceAll("S", "$"));

这是应用了代码的 textWatcher
    final EditText First = (EditText)findViewById(R.id.etFirst);
    String strFirst = First.getText().toString();
    final TextView done = (TextView)findViewById(R.id.tvName);
    String strDone = done.getText().toString();
    Button Trans = (Button) findViewById(R.id.bTrans);

        Trans.setOnClickListener(new View.OnClickListener() {

            public void onClick(View v) {
                //First EditText
                if (First.getText().toString().equals("John")) {
                    done.setText("JOHN");
                } else {
                if (First.getText().toString().equals("Ahmed")) {
                    done.setText("AHMED");
                } else  {
                done.setText(First.getText());
                                }
                            }
                        };
                    });

        First.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) {
                String text = First.getText().toString();
                text = text.replace('s', 'd'); // Any of the diffrent replace methods should work.
                text = text.replace('S', '$'); // This uses the char replace method. Note, the ' quotations
                text = text.replace('O', '@');
                text = text.replace('o', '@');
                done.setText(text);
            }
        });

错误可能在于您再次获取旧字符串并对其应用 text.replace 。而不是修改后的字符串。我原以为它会得到新的字符串,但 setText 似乎不会立即触发。

因此,如果将字符串放入变量中,则应用所有更改。然后把它放回你的文本框它会正常工作。 ( I have tested and working code here Pasted above )

关于Android 使用 TextWatcher 替换单词,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12081924/

10-10 17:11