的EditText - 允许范围内,只知道特定的字符(EditText - allow only

2019-09-25 18:58发布

在我的应用我有EditText 。 我希望用户能够插入只有数字和由我指定的两个字符。 我知道存在android:digits="..." ,而是因为我这两个字从上下文中得到我不能使用此。 现在我写的KeyListener:

public class CurrencyKeyListener implements KeyListener {

  @Override
  public void clearMetaKeyState(View view, Editable content, int states) {
    // TODO Auto-generated method stub

  }

  @Override
  public int getInputType() {
    return InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL;
  }

  @Override
  public boolean onKeyDown(View view, Editable text, int keyCode, KeyEvent event) {
    return false;
  }

  @Override
  public boolean onKeyOther(View view, Editable text, KeyEvent event) {
    // TODO Auto-generated method stub
    return false;
  }

  @Override
  public boolean onKeyUp(View view, Editable text, int keyCode, KeyEvent event) {
    CharFormatter charFormatter = new CharFormatter(view.getContext());
    char pressedKey = (char) event.getUnicodeChar();
    if (Character.isDigit(pressedKey) || pressedKey == currencyFormatter.getDecimalSeparator()
        || pressedKey == currencyFormatter.getGroupingSeparator()) {
      return false;
    }
    return true;
  }

}

当然,它不工作,我不知道如何解决。 该监听块像清除按钮许多重要的角色,并允许输入的字符,我不希望允许。 然后在一些随机的时刻,它会阻止我的整个键盘。

有谁知道如何正确地写这个的KeyListener? 提前致谢。

Answer 1:

这是做这样的任务的正确方法

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++) { 
                        // Your condition here 
                        if (!Character.isLetterOrDigit(source.charAt(i))) { 
                                return ""; 
                        } 
                } 
                return null; 
        } 
}; 

edit.setFilters(new InputFilter[]{filter}); 


Answer 2:

看到我的答案在这里如何创建自定义输入过滤器上的EditText输入过滤原因重复的文字 ,当然你必须修改了一下过滤条件



文章来源: EditText - allow only specific characters known from context