2014-01-30 21 views
1

我有3 EditTexts (et1, et2, et3),彼此相鄰排列,maxLength'1'EditTexts之間的連續打字

我的要求是:

  1. 當信在編輯文本輸入(只能包含1字符,如最大長度爲1),光標會自動進入下一個EditText上。

  2. 同樣,當用戶再次點擊et2時,光標應該到et1。

  3. edittext將按順序填充。這是第一個,然後是第二個,然後是第三個。 所以,即使用戶點擊第三個編輯文本框&第一個和第二個文本框是空的,然後光標會轉到第一個編輯文本。簡而言之,光標將轉到最後一個空的編輯文本。

這是如何實現programmaticaly。

謝謝

回答

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(); 



    } 
相關問題