返回

Android 最简单的限制输入方式之一

Android




在 Android 中,限制输入最简单的方法之一是使用 InputFilter 类。InputFilter 提供了一个接口,用于过滤用户在 EditText 中输入的文本。我们可以通过重写 InputFilter.filterText() 方法来实现我们自己的过滤规则。例如,以下代码可以用来限制 EditText 中只能输入数字:

InputFilter filter = new InputFilter() {
    @Override
    public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
        if (source.equals("")) { // 删除操作
            return null;
        }
        if (!Pattern.matches("[0-9]", source.toString())) { // 只允许输入数字
            return "";
        }
        return null;
    }
};

然后,我们可以将这个 InputFilter 添加到 EditText 中:

EditText editText = (EditText) findViewById(R.id.edit_text);
editText.setFilters(new InputFilter[] {filter});

这样,当用户在 EditText 中输入非数字的字符时,这些字符将被过滤掉。

另一种限制输入的方法是使用 TextWatcher 类。TextWatcher 提供了一个接口,用于监听 EditText 中的文本变化。我们可以通过重写 TextWatcher.onTextChanged() 方法来实现我们自己的过滤规则。例如,以下代码可以用来限制 EditText 中只能输入数字:

TextWatcher watcher = new TextWatcher() {
    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {
    }

    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {
        String text = s.toString();
        if (!Pattern.matches("[0-9]", text)) { // 只允许输入数字
            editText.setText(text.replaceAll("[^0-9]", ""));
        }
    }

    @Override
    public void afterTextChanged(Editable s) {
    }
};

然后,我们可以将这个 TextWatcher 添加到 EditText 中:

EditText editText = (EditText) findViewById(R.id.edit_text);
editText.addTextChangedListener(watcher);

这样,当用户在 EditText 中输入非数字的字符时,这些字符将被自动替换成数字。

以上就是两种简单的方法来限制 Android 中的输入。我们可以根据自己的需要选择使用哪种方法。