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?
- Cómo hacer los métodos en beanshell?
- Android: Debería agregar un constructor vacío a un fragmento utilizado en ViewPager
- Android: traducciones en recursos
- RDP a través de Bluetooth
- Android / Java - Publicar texto simple en la pared de Facebook?
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);
- ¿Cuál es la mejor manera de compartir datos entre actividades?
- ListView muestra sólo un elemento
- MediaRecorder start () falla si se llama demasiado rápido
- ¿Cómo puedo mostrar la imagen en la aplicación de Android
- Cómo pausar una Httpurlconnection en android en el botón de clic
- Problemas para cancelar un CountDownTimer Android Java
- Cajón de navegación para múltiples actividades
- ¿Cómo crear un widget de Android con opciones?
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
- Obtenga el tamaño medido y la posición del mapa de bits en el lienzo después de la transformación 2D
- ¿Cómo puedo transferir el búfer de audio para reproducirlo directamente