限制在EditText上输入数字

时间:2016-04-11 20:32:06

标签: java android

我需要限制用户在EditText中输入Numbers(0-9)并允许键盘中的每个其他字符。

以下代码不适用于以下情况。

如果用户输入字母,然后输入数字,则editText将变为空。

InputFilter withoutNumberFilter = 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.isDigit(source.charAt(i))) {
                return "";
            }
        }
        return null;
    }
};

editText.setFilters(new InputFilter[] { withoutNumberFilter });

4 个答案:

答案 0 :(得分:1)

您可以使用isLetter()方法进行比较

if (!Character.isLetter(source.charAt(i))) {
   return "";
}

答案 1 :(得分:1)

您只需将条件更新为:

if (!Character.isLetter(source.charAt(i)))

这应该可以解决问题。

答案 2 :(得分:0)

只需使用正则表达式替换所有数字:

source = source.replaceAll("[0-9]","")

如果您想在用户输入输入时执行此操作,则只需在每个操作事件后输入此语句。

答案 3 :(得分:0)

扩展您的类可能有助于实现侦听器。然后,您可以在其他表单中重用扩展的JTextField。

只是一个简单的例子。

import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.JTextField;

public class MyJTextField extends JTextField implements KeyListener {

    public MyJTextField() {
        super();
        addKeyListener(this);
    }

    boolean found = false;

    @Override
    public void keyPressed(KeyEvent arg0) {

        char c = arg0.getKeyChar();
        char[] cs = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'};

        for (int i = 0; i < cs.length; i++) {
            if (c == cs[i]) {
                found = true;
                break;
            }
        }
    }

    @Override
    public void keyReleased(KeyEvent arg0) {

        if (found) {
            String text = getText();
            setText(text.substring(0, text.length() - 1));
            found = false;
        }
    }

    @Override
    public void keyTyped(KeyEvent arg0) {
        // No action.
    }
}

欢迎提出任何其他意见。