2014-01-30 2 views
1

У меня есть 3 EditTexts (et1, et2, et3), расположенные рядом друг с другом, с maxLength от '1'.Непрерывная типизация между EditTexts

Мое требование:

  1. Когда буква печатается в тексте редактирования (может содержать только один символ, а максимальная длина 1), курсор автоматически переходит к следующему EditText.

  2. Аналогично, когда пользователь нажимает на et2, курсор должен перейти к et1.

  3. Редактор будет заполнен последовательным образом. Это первый первый, затем второй, затем третий. Таким образом, даже если пользователь нажимает на третье текстовое поле редактирования &, первое и второе текстовое поле пусто, а затем курсор переходит к первому редактору. Проще говоря, курсор перейдет к последнему пустому тексту редактирования.

Как это можно достичь программным путем.

Спасибо

ответ

0

Основная идея заключается в том, чтобы использовать TextWatcher.

Вы можете использовать что-то вроде этого:

et1.addTextChangedListener(new TextWatcher() { 
    @Override 
    public void beforeTextChanged(CharSequence s, int start, int count, int after) { 
    } 

    @Override 
    public void onTextChanged(CharSequence s, int start, int before, int count) { 
     et2.requestFocus; 
     et1.setEnabled(false); 
    } 

    @Override 
    public void afterTextChanged(Editable s) { 
    } 
}); 

et2.addTextChangedListener(new TextWatcher() { 
     String textBeforeChange; 

     @Override 
     public void beforeTextChanged(CharSequence s, int start, int count, int after) { 
      textBeforeChange = s.subSequence(start, start + count).toString(); 
     } 

     @Override 
     public void onTextChanged(CharSequence s, int start, int before, int count) { 
       if (s.subSequence(start, start + count).length == 0 
        && textBeforeChange .length >= 1) 
      et1.requestFocus(); 
     } 

     @Override 
     public void afterTextChanged(Editable s) { 
     } 
    }); 
+0

Это больше экономии вы просите EditText, чтобы очистить фокус перед попросить еще один, чтобы запросите его:) –

0

Вот aswer на вопросы:

//findViewById and bla bla bla... 

    editText1.addTextChangedListener(new TextWatcher() { 



     @Override 
     public void beforeTextChanged(CharSequence s, int start, int count, int after) { 

      editText1.setSelection(count); //set the cursor after the last character 

     } 




     @Override 
     public void onTextChanged(CharSequence s, int start, int before, int count) { 


     } 




     @Override 
     public void afterTextChanged(Editable s) { 



      if(editText1.length() == 1){ //check for number of characters 

       editText1.clearFocus(); 

       editText2.requestFocus(); 

      } 



     } 




    }); 

    editText2.addTextChangedListener(new TextWatcher() { 



     @Override 
     public void beforeTextChanged(CharSequence s, int start, int count, int after) { 

      editText2.setSelection(count); 


      if(editText1.length() != 1){ //check if previous editText is empty 

       editText2.clearFocus(); 

       editText1.requestFocus(); 

      } 



     } 




     @Override 
     public void onTextChanged(CharSequence s, int start, int before, int count) { 


     } 




     @Override 
     public void afterTextChanged(Editable s) { 



      if(editText2.length() == 1){ 

       editText2.clearFocus(); 

       editText3.requestFocus(); 

      } 



     } 




    }); 


    editText3.addTextChangedListener(new TextWatcher() { 



     @Override 
     public void beforeTextChanged(CharSequence s, int start, int count, int after) { 


      editText3.setSelection(count); 


      if(editText1.length() != 1){ //check if first editText is empty 

       editText3.clearFocus(); 

       editText1.requestFocus(); 

      } 



      else if(editText2.length() != 1){ //check if second editText is empty 

       editText3.clearFocus(); 

       editText2.requestFocus(); 

      } 



     } 




     @Override 
     public void onTextChanged(CharSequence s, int start, int before, int count) { 


     } 




     @Override 
     public void afterTextChanged(Editable s) { 



      if(editText3.length() == 1){ 

       //Do something after the last editText was typed 

      } 



     } 




    }); 








    //user pressed the back button 
    @Override 
    public void onBackPressed(){ 



     if(editText2.isFocused()){ 

      editText2.clearFocus(); 

      editText1.requestFocus(); 

     } 



     else if(editText3.isFocused(){ 

      editText3.clearFocus(); 

      editText2.requestFocus(); 

     } 



     else super.onBackPressed(); 



    } 
Смежные вопросы