Android Limit EditText sólo a la entrada entero

Estoy tratando de aplicar algún tipo de verificación a un edittext. Un usuario sólo debe ser capaz de introducir números enteros entre 1 y 60. Me pregunto si debo dejar que ellos tipo lo que quieran y cuando se centran fuera de la edittext comprobar el contenido y si está fuera de límites cambiar el valor a un valor predeterminado , Digamos 0.

¿O hay una manera de limitar el teclado para permitir sólo números enteros?

ACTUALIZACIÓN: Estoy haciendo todo mediante programación. Hasta ahora he podido limitar a sólo la entrada numérica y tener un máximo de 2 caracteres mediante la implementación de lo siguiente. Todavía estoy luchando para limitar sólo los valores entre 0 y 60 sin embargo.

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

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

Puesto que usted no tiene que cambiar todas las llaves que usted puede utilizar el addTextChangedListener(TextWatcher watcher) como esto:

 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 está más allá de lo que está buscando y puede incluso descuidar las claves mediante la comprobación en ese bucle.

En XML:

  • Si usas números solo usa android:inputType="number" .
  • Para limitar el número de dígitos a 2, incluya android:maxLength="2" .

¡Lo tengo! Revisé el Internet para siempre, y poner algunas cosas juntas para conseguir que funcione. Básicamente lo que hace es ejecutar un proceso paralelo que se ejecutará constantemente mientras el usuario tiene su enfoque en el cuadro edittext en particular. Establecerá un filtro para que el usuario sólo pueda introducir 0-5 en la primera ranura entera, pero se le permitirá entrar 0-9 para la segunda. Esto, obviamente, dará 0-59 en lugar de 1-60, pero eso es lo que quiere para los segundos de todos modos. Este código va antes que el método onCreate, dentro 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 del método onCreate :

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

Como he dicho en la primera parte, esto hará que el usuario sólo puede introducir los números entre 00 y 59 en su cuadro edittext. Sé que puede parecer un poco descuidado, y probablemente se puede limpiar un poco en algunas de las declaraciones if, pero por lo que puedo decir que funciona absolutamente perfectamente, y no parece ralentizar el sistema en absoluto. Espero que esto le ayude, y si no, los googlers futuro.

Si se limita a los números solamente, puede utilizar el

 EditText.addTextChangedListener 

Para obtener el valor inputed y verificar que no es más de 60

Usted puede permitir fácilmente sólo números añadiendo android:numeric="integer" al EditText en el archivo xml de la disposición

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

  • SQLite de Android que elimina una fila específica de la base de datos
  • Error al intentar probar análisis XML con Robolectric
  • Bean and EBean conception Anotaciones para Android
  • Android Maps: No se pudo cargar el mapa. No se pudo contactar con los servidores de Google
  • Gradle Android Build Project Error: No se pudo encontrar el recurso de metadatos
  • Generar mapa <String, String> de POJO
  • Problema al analizar JSON
  • ¿Puedo conectar Apache Derby DataBase con la aplicación Android?
  • Manipulación de imágenes JPEG progresivas en Libgdx
  • ¿Cómo ejecutar pruebas filtradas con etiquetas con pepino-jvm y gradle?
  • La biblioteca de ActionBarSherlock está llena de errores después de ser importada
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.