2012-06-02 8 views
11

입력하는 동안 EditText 내 텍스트를 바꿔야합니다 : 예 : 사용자가 "A"를 누르면 버퍼에 저장되고 EditText "D"가 대신 표시됩니다 (look "D"를 누르는 것처럼). 는 지금은 눌러 문자를 읽을 수 있지만 I에 유래 피하기 위해 등의 모든 문자를 표시 할 수 없습니다 :EditText - 입력하는 동안 텍스트 변경

final EditText et = (EditText) findViewById(R.id.editTexts); 
    final TextView tv = (TextView) findViewById(R.id.textView2); 

    et.addTextChangedListener(new TextWatcher() 
    { 
      public void afterTextChanged(Editable s){} 
      public void beforeTextChanged(CharSequence s, int start, int count, int after) { 

      } 
      public void onTextChanged(CharSequence s, int start, int before, int count) { 
       if(s.length() > 0) { 
        tv.setText(s.toString().substring(s.length()-1)); 
        et.setText(""); 
       } 
      } 
    }); 
+0

다음을 참조하십시오. ....... http://stackoverflow.com/questions/9498155/android-java-update-same-edittext-in-textchanged-event –

+0

try s.clear(); s를 ur로 설정 한 후 textView – Pradeep

+1

같은 질문 두 번 http://stackoverflow.com/questions/10862343/access-edittext-from-textwatcher#10862398 – Ishu

답변

22

당신은 그것을 변경할 수 있습니다이 링크를 참조하십시오 요구 ::

public class SampleActivity extends Activity { 
    TextWatcher tt = null; 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     final EditText et = (EditText) findViewById(R.id.editText1); 
     final TextView tv = (TextView) findViewById(R.id.textView1); 
     tt = new TextWatcher() { 
      public void afterTextChanged(Editable s){ 
       et.setSelection(s.length()); 
      } 
      public void beforeTextChanged(CharSequence s,int start,int count, int after){} 
      public void onTextChanged(CharSequence s, int start, int before, int count) { 
       et.removeTextChangedListener(tt); 
       et.setText(et.getText().toString().replace("A", "C")); 
       et.addTextChangedListener(tt); 
      } 
     }; 
     et.addTextChangedListener(tt); 
    } 
} 
+0

et는 "a"를 "c"로 바꿉니다. 그러나 반대로 됨으로써 필드의 시작 부분에 문자가 추가됩니다. –

+1

ET.setSelection (s.length()); 어딘가에 !! –

7

대화식으로 텍스트를 변경하려면 TextWatcher을 등록해야합니다. 그러나 관찰자 내부의 텍스트를 변경하려고하면 관찰자에게 더 많은 호출이 생성됩니다. 내 해킹은 텍스트를 변경하고 싶을 때 일시적으로 감시자를 제거하고 바로 다시 등록하는 것입니다.

mEditText.addTextChangedListener(new TextWatcher() { 
     @Override public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) { } 
     @Override public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) { } 
     @Override public void afterTextChanged(Editable editable) { 
      mEditText.removeTextChangedListener(this); 
      mEditText.setText(//TODO change whatever you like here); 
      mEditText.setSelection(editable.length()); //moves the pointer to end 
      mEditText.addTextChangedListener(this); 
     } 
관련 문제