2014-01-30 20 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(); 



    } 
相关问题