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.

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.

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.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.