【问题标题】:Hide only numbers in EditText for pin-code (Android)仅在 EditText 中隐藏数字以获取 pin 码 (Android)
【发布时间】:2020-11-24 12:45:53
【问题描述】:

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

【问题讨论】:

    标签: android android-edittext pin-code


    【解决方案1】:

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

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

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

    【讨论】:

    • 我的应用程序中的最低 API 支持 - 23,目标 - 29
    • 所以在我的回答中使用 XML 或 Java/Kotlin 方法中的 android:letterSpacing="0.2"。并从您的String 中删除所有空格。您的 EditText 需要 4 位数字,因此只允许并在其中发布 4 个字符
    • 热我可以添加掩码“_ _ _ _”吗?
    • 只需使用"____" 而不是"_ _ _ _"setLetterSpacing 将在该字段中的数字之间添加间距
    猜你喜欢
    • 2021-09-12
    • 2015-11-17
    • 2014-04-10
    • 2014-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-03
    相关资源
    最近更新 更多