在 EditText 中仅隐藏数字以获取 pin 码 (Android)

Hide only numbers in EditText for pin-code (Android)

我的应用程序中有 EditText,此 TextWatcher 和 numberSigned 输入类型:

TextWatcher() {
    @Override
    public void afterTextChanged(Editable s)
    {
        codeinput.removeTextChangedListener(this);
        String text = s.toString();
        text = text.replaceAll("[^0-9]", "");

        if (text.length() > 4)
           text = text.substring(0, 4);

        String newText = "";
        for (char c : text.toCharArray())
           newText += c + " ";
        text = newText.trim();

        String substring = "_ _ _ _".substring(text.length());
        text += substring;

        int length = text.replaceAll("([ ]?[_])+$", "").length();

        codeinput.setText(text);
        codeinput.setSelection(length);
        codeinput.addTextChangedListener(this);
    }

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

    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) { }
};

当我将输入类型从 numberSigned 更改为 numberPassword - 我的 EditText 中的所有符号都被隐藏,我只想隐藏数字。我该怎么做?

恐怕密码类型字段会隐藏所有字符,您无法对其进行任何操作

但考虑使用 setLetterSpacing 并且不要使用空格(自 API21 起可用的方法)

如果您需要较低的 API 支持并且您仍想使用 numberPassword 那么您必须设置 4 EditTexts - 使用 editText.requestFocus 跳转到 another/next View。或者你可以保留一个 EditTextnumberSigned,但在输入所有数字到星号的文本期间交换(将数字保留在一些分隔值中,因为 editText.getText 将 return 你只用星号)