4

我有一个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 时,什么也没有发生..只是 S 它不会是 $ ..

我究竟做错了什么 ?

4

2 回答 2

4

将 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)

于 2012-08-22T21:58:00.663 回答
1

将第一个 EditText 的值放入第二个 EditText 的值时,可以使用 Java 的replace()String 函数。例如,以下代码打印“$X@$$”。

String value = "SXOSS";
String newValue = value.replace("S", "$"); //replaces all instances of S with $
newValue = newValue.replace("O", "@"); //replaces all instances of O with @
System.out.println(newValue);
于 2012-08-22T22:01:22.910 回答