2012-05-06 10 views
5

Estoy tratando de aplicar algún tipo de verificación a un edittext. Un usuario solo debería poder ingresar números enteros entre 1 y 60. Me pregunto si debería dejar que escriban lo que quieran y cuando se enfoquen en el texto de edición, compruebe el contenido y, si está fuera de límites, cambie el valor a un valor predeterminado , digamos 0.Android Limitar EditText to Integer input only

¿O hay alguna manera de limitar el teclado para permitir números enteros?

ACTUALIZACIÓN: Estoy haciendo todo programáticamente. Hasta ahora, he podido limitarme a la entrada numérica y tener un máximo de 2 caracteres implementando lo siguiente. Todavía estoy luchando por limitar solo los valores entre 0 y 60.

editText.setInputType(InputType.TYPE_CLASS_NUMBER); 
    InputFilter[] FilterArray = new InputFilter[1]; 
    FilterArray[0] = new InputFilter.LengthFilter(2); 
    editText.setFilters(FilterArray); 

Respuesta

1

Si limita únicamente a los números, se podría utilizar el

EditText.addTextChangedListener 

para obtener el valor inputed y verificar que no ha terminado 60

Puede permitir fácilmente sólo números añadiendo android:numeric="integer" en el archivo de diseño xml

Aunque vale la pena mencionar que android:numeric="integer" ahora está en desuso

+0

'android: numeric =" integer "' es muy fino y útil, pero lamentablemente está en desuso. – TechNyquist

2

Puede utilizar android.text.method.KeyListener para reemplazar la entrada actual con lo que desee.

Dado que usted no tiene que cambiar todas las teclas que puede utilizar addTextChangedListener(TextWatcher watcher) método como este:

EditText editT = (EditText) findViewById(R.id.your_id); 
editT.addTextChangedListener(new TextWatcher() { 
@Override 
public void afterTextChanged(Editable s) { 
    // TODO Auto-generated method stub 
} 

@Override 
public void beforeTextChanged(CharSequence s, int start, int count, int after) { 
    // TODO Auto-generated method stub 
} 

@Override 
public void onTextChanged(CharSequence s, int start, int before, int count) { 
    // TODO Auto-generated method stub 

}); 

Hacer uso de ella para comprobar si su entrada es más allá de lo que busca e incluso se puede descuidar las teclas revisando ese bucle.

En XML:

  • Si está utilizando sólo números usar android:inputType="number".
  • Para limitar el número de dígitos a 2, incluya android:maxLength="2".
1

¡Lo tengo! Recorrí el internet para siempre, y reuní algunas cosas para que funcione. Básicamente, lo que hace es ejecutar un proceso paralelo que se ejecutará constantemente mientras el usuario se centra en el cuadro de texto de edición particular. Establecerá un filtro para que el usuario solo pueda ingresar 0-5 en el primer intervalo entero, pero se le permitirá ingresar 0-9 para el segundo. Obviamente, esto le dará 0-59 en lugar de 1-60, pero eso es lo que quiere en segundos de todos modos. Este código va antes del método onCreate, en el interior de su clase:

final InputFilter filter = new InputFilter() 
{ 
    public CharSequence filter(CharSequence source, int start, int end, 
       Spanned dest, int dstart, int dent) 
    { 
     for (int i = start; i < end; i++) 
     { 
      if ((source.charAt(start) == "6".charAt(0)) || (source.charAt(start) == "7".charAt(0)) || (source.charAt(start) == "8".charAt(0)) 
        || (source.charAt(start) == "9".charAt(0)) || (!Character.isDefined(source.charAt(i))))        
      { 
       return ""; 
      } 
     } 
     return null; 
    } 
}; 

private class FilterCheckerTask extends AsyncTask<Void, Void, Void> 
{  
    @Override 
    protected Void doInBackground(Void... params) 
    {   
     while(true) 
     {    
      if (<EditText>.getText().toString().isEmpty()) 
      { 
       Log.e("empty","empty");     
       <EditText>.setFilters(new InputFilter[]{filter, new InputFilter.LengthFilter(2)});    
      } 
      else if (<EditText>.getText().toString().charAt(0) >= "6".charAt(0)) 
      { 
       Log.e("front num bad","greater than 5"); 
       <EditText>.setFilters(new InputFilter[]{filter, new InputFilter.LengthFilter(2)}); 
      } 
      else 
      { 
       Log.e("unfiltered", "unfiltered"); 
       <EditText>.setFilters(new InputFilter[]{new InputFilter.LengthFilter(2)});  
      } 
      if (kicker) 
      { 
       return null; 
      } 
     }   
    }  
} 

Luego, dentro de la onCreate método:

Time_sec.setOnFocusChangeListener(new OnFocusChangeListener() 
    { 
     public void onFocusChange(View v, boolean hasFocus) 
     { 
      new FilterCheckerTask().execute(); 
      if(!hasFocus) 
        {kicker = !hasFocus;}        

     } 
    }); 

Como dije en la primera parte, esto hará que sea lo que el usuario solo puede ingresar números entre 00 y 59 en su cuadro de texto de edición.Sé que puede parecer un poco descuidado, y probablemente se pueda limpiar un poco en algunas de las declaraciones if, pero hasta donde sé, funciona perfectamente y no parece ralentizar el sistema en absoluto. Espero que esto te ayude, y si no, los futuros googlers.

+0

¿Qué pasaría si quisiera poner solo 7 allí? – Iurii