1

在我的应用程序中,我有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?提前致谢。

4

2 回答 2

2

这是完成此类任务的正确方法

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}); 
于 2013-09-11T08:25:54.397 回答
1

在这里查看我的答案如何在 EditText 上创建自定义 InputFilter InputFilter 导致重复文本,当然你必须修改一点过滤条件

于 2013-09-11T08:34:38.863 回答