2012-09-19 27 views
19

Según la pregunta y la respuesta publicadas How to automatically move to the next edit text in android, utilicé el código para pasar al siguiente cuadro de edición.Pasar al siguiente EditText en android

et1.addTextChangedListener(new TextWatcher() { 

    public void onTextChanged(CharSequence s, int start,int before, int count) 
    { 
     // TODO Auto-generated method stub 
     if(et1.getText().toString().length()==size)  //size as per your requirement 
     { 
      et2.requestFocus(); 
     } 
    } 
    public void beforeTextChanged(CharSequence s, int start, 
        int count, int after) { 
       // TODO Auto-generated method stub 

    } 

    public void afterTextChanged(Editable s) { 
       // TODO Auto-generated method stub 
    } 

}); 

El problema que estoy enfrentando es en caso de que entro en algo malo, entonces incluso si el usuario solicita explícitamente el enfoque, el cuadro de texto se desplaza a la siguiente debido al código en el vigilante de texto. ¿Hay algo que pueda hacer para evitar que esto suceda?

+0

puede usar: [KeyCode_Enter al lado EditarTexto] (http://stackoverflow.com/questions/3019965/keycode-enter-to-next-edittext) –

Respuesta

8

Puede comprobar la tecla pulsada por primera EditarTexto y si era "Enter", a continuación, mover el enfoque al siguiente Editar texto.

Esto puede ayudarle a: KeyCode_Enter to next edittext

1

También puede comprobar si en su condición que es ese derecho o no ..

if(et1.getText().toString().length()==size)  //size as per your requirement 
    { 
     if(et1.gettext.toString().equals(somethingwhichyouhavecheck)) 
     { 

        et2.requestFocus(); 
     } 
     else 
     { 
     } 
    } 
+0

Hay es absolutamente nada con lo que puedo comparar. Es el usuario quien decide qué escribir – user1667307

+0

Usted dijo que el problema al que me enfrento es en caso de que ingrese algo incorrecto. ¿Qué está mal y qué es escribir? da un ejemplo. –

+0

Quiere decir, si restringe el tamaño del texto en EditText, entonces, si el usuario ingresa algo que no quiere ingresar y desea corregirlo una vez escrito, eso ocasionaría inconvenientes. – Hiral

2

Usted necesidad de validar la entrada del usuario para satisfacer sus expectativas. Si eso se cumple, entonces solo llame al et2.requestFocu()

+0

El problema es que yo mismo no sé el rango de lo que es válido y lo que no (por ejemplo: todos los números de cuatro dígitos son válidos, y si el usuario necesita cambiar lo que ingresó es muy problemático) – user1667307

+0

¿Qué pasará si no llama a et2.requestFocus()? todavía va a su próximo campo? – UVM

1

Este código funciona como se esperaba.

etFName.setOnKeyListener(new OnKeyListener() { 
      public boolean onKey(View v, int keyCode, KeyEvent event) { 
       if(etFName.getText().toString().length()==4 && keyCode == KeyEvent.KEYCODE_BACK) 
       { 
        typinget1 = true; 
       } 
       else if(etFName.getText().toString().length()==4 && typinget1==true)  //size as per your requirement 
       { 
        typinget1 = false; 
        etLName.requestFocus(); 

       } 
       else if(etFName.getText().toString().length()<=4 && typinget1==false) 
       { 
        typinget1 = true; 

       } 

       return false; 
      } 
     }); 
2

que funcione para mí:

final EditText code1=((EditText)view.findViewById(R.id.code1)); 
    final EditText code2=((EditText)view.findViewById(R.id.code2)); 
    final EditText code3=((EditText)view.findViewById(R.id.code3)); 
    final EditText code4=((EditText)view.findViewById(R.id.code4)); 



    OnKeyListener key=new OnKeyListener() { 

     @Override 
     public boolean onKey(View v, int keyCode, KeyEvent event) { 
      if(!((EditText) v).toString().isEmpty()) 
      v.focusSearch(View.FOCUS_RIGHT).requestFocus(); 

      return false; 
     } 
    }; 




    code1.setOnKeyListener(key); 
    code2.setOnKeyListener(key); 
    code3.setOnKeyListener(key); 
24

Puede ser que sea muy tarde pero tengo una solución que es mucho más fácil de aplicar. Solo agregue este código al campo edittext en el archivo layout.xml. Agregue esto para editar el texto que desea mostrar un botón siguiente en lugar de un botón hecho. Entonces, señalará el siguiente campo Edittext.

android:imeOptions="actionNext" 
+1

Para la entrada alfanumérica (valor predeterminado de edittext) también agregue android: singleLine = "true" – Kay

-3

que tenemos una solución muy simple para esto sólo hay que poner siguiente propiedad en el control EditarTexto xml

androide: inputType = "textPersonName"

11

Si desea centrarse próxima EditarTexto en introducir presionado puede usar esas opciones en el código XML para enfocar el texto siguiente EditText:

Opción 1:

<EditText 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:imeOptions="actionNext" 
    android:singleLine="true"/> 

Opción 2:

<EditText 
    android:id="@+id/et1" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:singleLine="true" 
    android:nextFocusForward="@+id/et2"/> 

<EditText 
    android:id="@+id/et2" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:singleLine="true"/>