Android – Quiere restringir algunos charaters al edittext
Me quedé atascado con el siguiente escenario.
Tengo un texto de edición y su campo de contraseña. Y quiero restringir algunos caracteres como (az, AZ, 1-0 y algunos caracteres especiales). Fijé el inputType de este edittext como "wordPassword" y utilicé Numberkeylistner para restringir los caracteres. Funciona bien en la tableta Motorola xoom.
- Android: KeyListener para un EditText que no recibe claves
- Coloque el cursor al final del texto en EditText
- Problema con el EditText de Android: KeyListener
- Escucha la tecla ENTER en Android
- Android onKeyListener en EditText sólo responde a la tecla "Enter" cuando se pulsa dos veces
Pero estoy recibiendo sugerencias al introducir la contraseña en la tableta ASUS. El problema es cuando comento el siguiente conjunto de líneas, entonces su multa de trabajo que significa su no mostrar ninguna sugerencia para el campo de contraseña.
NumberKeyListener PwdkeyListener = new NumberKeyListener() { public int getInputType() { return InputType.TYPE_MASK_VARIATION; } @Override protected char[] getAcceptedChars() { return new char[] { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '@', '.', '_', '#', '$', '%', '&', '*', '-', '+', '(', ')', '!', '"', '\'', ':', ';', '/', '?', ',', '~', '`', '|', '\\', '^', '<', '>', '{', '}', '[', ']', '=', '£', '¥', '€', '.', '¢', '•','©' }; } }; edtObj.setKeyListener(PwdkeyListener);
Pero recibo este problema sólo en la tableta ASUS.
¿Puede alguien decirme cómo restringir el carácter sin usar keylistener.
Gracias por adelantado.
- Android onkey - dispatchKeyEvent sin disparar
- Tecla de captura pulsada con el teclado virtual en Android?
- Editar el oyente de clave de texto
- EditText OnKeyListener no funciona
- Cómo manejar la tecla Intro usando TextWatcher en Android
El FIlter de entrada se podría utilizar para restringir el tipo de charcters que se introducen en un campo editText. En este código, Character.isLetterOrDigit (…) se utiliza para evitar letras y dígitos. Usando Character.getType (..) , se pudo encontrar el tipo de cada charcter que se estaba entrando. Aplique su lógica aquí para cumplir con su requisito.
InputFilter filter = new InputFilter() { @Override public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) { for (int i = start; i < end; i++) { System.out.println("Type : "+Character.getType(source.charAt(i))); if (Character.isLetterOrDigit(source.charAt(i))) { return ""; } } return null; } }; editText.setFilters(new InputFilter[] { filter });
Espero que esto ayude.
Finalmente encontré el problema.
Solución 1: Lo que resolverá el problema en ASUS, pero mostrando el teclado numérico en MotoXoom En getInputType en lugar de devolver InputType.TYPE_MASK_VARIATION, tengo que devolver InputType.TYPE_CLASS_NUMBER. Esto soluciona el problema.
Solución 2: Que resolverá el problema en ambos. Como Lukap me dijo que he modificado el método CharSequence y esto está funcionando bien y aquí está el código.
InputFilter[] filters = new InputFilter[1]; filters[0] = new InputFilter(){ @Override public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) { if (end > start) { char[] acceptedChars = new char[]{'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '@', '.', '_', '#', '$', '%', '&', '*', '-', '+', '(', ')', '!', '"', '\'', ':', ';', '/', '?', ',', '~', '`', '|', '\\', '^', '<', '>', '{', '}', '[', ']', '=', '£', '¥', '€', '.', '¢', '•','©'}; for (int index = start; index < end; index++) { if (!new String(acceptedChars).contains(String.valueOf(source.charAt(index)))) { return ""; } } } return null; } }; edtTextPassword.setFilters(filters);
Creo que deberías ver esto: http://developer.android.com/reference/android/text/InputFilter.html ; y esto tiene un problema similar resuelto.
A veces, cuando tienes este tipo de problemas, haz lo siguiente:
if(motorola){ //stuff that works for motorola }else if(asus){ //stuff that works for asus }
Nota: que a veces no hay una solución que funciona en todas partes.