Android的使用TextWatcher代替字词(Android using TextWatche

2019-09-21 11:55发布

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

例如:我如何在S为$或O至BE @

更新:

    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型没有任何反应。 。只是原来是这样做不获得为$ ..

我究竟做错了什么 ?

Answer 1:

分配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



Answer 2:

当你第一次的EditText的价值投入第二的EditText的值,你可以使用Java的replace()的字符串函数。 例如,下面的代码打印“$ 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);


文章来源: Android using TextWatcher to replace words