在我的应用中,我有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?提前谢谢。
答案 0 :(得分: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});
答案 1 :(得分:1)
在这里看到我的答案如何创建自定义InputFilter InputFilter on EditText cause repeating text,当然你必须修改位过滤条件