EditText - change text while typing

前端 未结 2 1214

I need to replace the text inside the EditText while typing : Example : if the user pressed \"A\" it would be stored into a buffer and on the EditText \"D\" is displayed instead

相关标签:
2条回答
  • 2021-02-02 16:15

    You can change it as required::

    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 讨论(0)
  • 2021-02-02 16:19

    In order to change the text interactively, you need to register a TextWatcher. But trying to change the text inside the watcher creates further calls to the watcher. My hack is to temporarily remove the watcher when I want to change the text, and re-register it right after

        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);
            }
    
    0 讨论(0)
提交回复
热议问题