Android仅为Edittext禁用空间

在我的android应用程序中,我只需要禁用空格键。 但是我没有找到解决这个问题的办法。 我需要禁用空格键,当用户输入空格不应该工作,特殊字符,字母,数字和所有其他应该工作。 我试过的是,

etPass.addTextChangedListener(new TextWatcher() { @Override public void onTextChanged(CharSequence s, int start, int before, int count) { // TODO Auto-generated method stub String str = s.toString(); if(str.length() > 0 && str.contains(" ")) { etPass.setError("Space is not allowed"); etPass.setText(""); } } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { // TODO Auto-generated method stub } @Override public void afterTextChanged(Editable s) { // TODO Auto-generated method stub } }); 

但是这里的问题一旦空间来了全文删除。 我删除了

 etPass.setText(""); 

这一行,所以当时显示的是错误信息,但是当时用户仍然可以输入空格。 但我需要的是用户不应该能够键入空间。

你为什么不考虑一个字符过滤器..这是一个示例代码片段。

 /* To restrict Space Bar in Keyboard */ 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.isWhitespace(source.charAt(i))) { return ""; } } return null; } }; input.setFilters(new InputFilter[] { filter }); 

她是我的解决方案:

 android:digits="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890" android:inputType="textFilter" 

将其添加到xml文件中的编辑文本中

这个版本支持键盘输入的空格输入。

 InputFilter filter = new InputFilter() { public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) { String filtered = ""; for (int i = start; i < end; i++) { char character = source.charAt(i); if (!Character.isWhitespace(character)) { filtered += character; } } return filtered; } }; input.setFilters(new InputFilter[] { filter }); 

PS: Kotlin版本:

 input.filters = arrayOf(InputFilter { source, _, _, _, _, _ -> source.toString().filterNot { it.isWhitespace() } }) 
 EditText yourEditText = (EditText) findViewById(R.id.yourEditText); yourEditText.setFilters(new InputFilter[] { new InputFilter() { @Override public CharSequence filter(CharSequence cs, int start, int end, Spanned spanned, int dStart, int dEnd) { // TODO Auto-generated method stub if(cs.equals("")){ // for backspace return cs; } if(cs.toString().matches("[a-zA-Z]+")){ // here no space character return cs; } return ""; } } }); 

禁用空间使用

 public boolean onKeyDown(int keyCode, KeyEvent event) { if (editclicked) { if (keyCode == KeyEvent.KEYCODE_SPACE) { return false } } else { super.onKeyDown(keyCode, event); } } 

只要在你的代码中替换它,它应该完美的工作,

 etPass.setText(etPass.getText().toString().replaceAll(" ","")); 

尝试这个

使用android:digits不包括“”(空格在里面)

 <EditText android:inputType="number" android:digits="0123456789.abcdefghijklmnl....."// write character that you want to allow /> 

而不是etPass.setText(""); 只需从EditText数据中删除空格。

 etPass.setText(etPass.getText().toString().trim()); etPass.setSelection(autoComplete.getText().length()); 

所以你的IF条件如下:

 if(str.length() > 0 && str.contains(" ")) { etPass.setError("Space is not allowed"); etPass.setText(etPass.getText().toString().trim()); etPass.setSelection(etPass.getText().length()); } 
Interesting Posts