2012-08-22 81 views
4

我有一個editText,你在它寫的東西然後當你點擊下一個..你寫的文本被寫入另一個editText .. 它的工作完美.. 但我想用textWatcher替換一些字母..Android使用TextWatcher替換單詞

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

UPDATE:

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

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

+0

代碼製造商很多錯誤... –

+0

你將不得不更加具體,什麼部分出錯。你有沒有嘗試修復這些錯誤。你有沒有輸入任何必要的軟件包。 – Doomsknight

+0

概率與overRides ..我刪除了他們..這是代碼現在http://pastebin.com/uV7ribXD它什麼也沒有..注意* Trans是按鈕點擊,所以在Edittext一(第一)中的文本被寫入EditText兩個(完成) –

1

將第一個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); 
+0

謝謝,我試過\t \t \t \t \t \t First.getText()。toString()。replaceAll(「Z」,「E」); ..但它不起作用 –

+0

你確定要做'First.setText(First.getText()。toString()。replaceAll(「Z」,「E」))'? – axl

+0

好的,謝謝=) –