[Android] Bloqueio de caracteres especiais não funciona quando o app é testado no celular

Oi gente,

Estou testando meu app no meu celular, usei o método onKey para bloquear alguns caracteres especiais nas caixas de texto de entrada de dados no banco de dados, mas só o bloqueio da tecla “enter” funcionou, abaixo está o código que usei:

public boolean onKey(View v, int keyCode, KeyEvent event) {			
	if ((event.getAction() == KeyEvent.ACTION_DOWN) && (keyCode == KeyEvent.KEYCODE_ENTER)) {  
		/*Cancelar a ação do usuário de apertar a tecla enter do celular, enquanto ele estiver 
		*preenchendo o EditText.*/  		            
		return true;  
	}else if((event.getAction() == KeyEvent.ACTION_DOWN) && (keyCode == KeyEvent.KEYCODE_APOSTROPHE)) {
		/*Cancelar a ação do usuário de apertar a tecla ' do celular, enquanto ele estiver 
		*preenchendo o EditText.*/  		            
		 return true;  
	}else if((event.getAction() == KeyEvent.ACTION_DOWN) && ((keyCode == KeyEvent.KEYCODE_BACKSLASH) || (keyCode == KeyEvent.KEYCODE_SLASH))) {
		/*Cancelar a ação do usuário de apertar as tecla "\" ou "/" do celular, enquanto ele estiver 
		 *preenchendo o EditText.*/  		            
		return true;  
	}else if((event.getAction() == KeyEvent.ACTION_DOWN) && (keyCode == KeyEvent.KEYCODE_EQUALS)) {
		/*Cancelar a ação do usuário de apertar a tecla "=" do celular, enquanto ele estiver 
		*preenchendo o EditText.*/  		            
		return true;  
	}else if((event.getAction() == KeyEvent.ACTION_DOWN) && ((keyCode == KeyEvent.KEYCODE_LEFT_BRACKET) || (keyCode == KeyEvent.KEYCODE_RIGHT_BRACKET))) {
		/*Cancelar a ação do usuário de apertar as teclas "[" ou "]"do celular, enquanto ele estiver 
		*preenchendo o EditText.*/  		            
		return true;  
	}else if((event.getAction() == KeyEvent.ACTION_DOWN) && (keyCode == KeyEvent.KEYCODE_SEMICOLON)) {
		 /*Cancelar a ação do usuário de apertar a tecla ";" do celular, enquanto ele estiver 
		 *preenchendo o EditText.*/  		            
		 return true;  
	}else if((event.getAction() == KeyEvent.ACTION_DOWN) && (keyCode == KeyEvent.KEYCODE_TAB)) {
		/*Cancelar a ação do usuário de apertar a tecla "Tab" do celular, enquanto ele estiver 
		 *preenchendo o EditText.*/  		            
		 return true;  
	}else if((event.getAction() == KeyEvent.ACTION_DOWN) && (keyCode == KeyEvent.KEYCODE_UNKNOWN)) {
		/*Cancelar a ação do usuário de apertar uma tecla desconhecida do celular, enquanto ele estiver 
		 *preenchendo o EditText.*/  		            
		 return true;  
	}
	return false;			
}

Olá nissivm!

Se vc estiver tentando bloquear esses caracteres num EditText, pesquise sobre a interface android.text.InputFilter e sobre o método addFilter() da classe EditText.

Espero ter ajudado.

Estou usando o código abaixo e ele está funcionando, mas falta limitar a quantidade de caracteres na caixa de texto, o maxLength no xml não deu certo, como faço?

InputFilter filter = new InputFilter() {
	    public CharSequence filter(CharSequence source, int start, int end,Spanned dest, int dstart, int dend) { 
	        for (int i = start; i < end; i++) { 
	             if (!Character.isLetterOrDigit(source.charAt(i)) && !Character.isSpaceChar(source.charAt(i)) && !((String) source).substring(i, i+1).equals(",")) { 
	                 return "";     
	             }     
	        }
	        return null;   
	    }		  
	};

Olá!

para limitar a quantidade, é mais simples:

Espero ter ajudado