首页 > 解决方案 > 仅在 EditText 中隐藏数字以获取 pin 码 (Android)

问题描述

我在 myApp 中有 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 中的所有符号都被隐藏时,我只想隐藏数字。我该怎么做?

在此处输入图像描述

在此处输入图像描述

标签: androidandroid-edittextpin-code

解决方案


我担心密码类型字段隐藏了所有字符,您对此无能为力

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

如果您需要较低的 API 支持并且仍想使用,numberPassword那么您必须设置 4 EditTexts -editText.requestFocus用于跳转到另一个/下一个View。或者您可以保留一个EditTextnumberSigned但在输入所有数字到星号的文本期间进行交换(将数字保留在某个单独的值中,因为editText.getText只会返回星号)


推荐阅读