【问题标题】:Create custom InputMask In Android在 Android 中创建自定义 InputMask
【发布时间】:2019-03-28 14:04:13
【问题描述】:

如何在 Android 中创建自定义输入掩码。 例如,需要 DFSU 618908 表示开头 4 位是字母,然后是空格,然后是 7 位。

在网页开发中,我可以使用InputMaskRobinHerbots 我一直在google,我找到了这个RedMadRonbot但是用kotlin写的,这个我不熟悉。

我怎样才能在我的情况下使用 TextWatcher 在掩码中创建...?

感谢任何帮助。

<EditText
    android:id="@+id/editTextDialogNomorContainerDeliveryEkspor"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" >
</EditText>

在我的活动中

EditText nomorContainer = (EditText) promptsView.findViewById(R.id.editTextDialogNomorContainerDeliveryEkspor);
//some TextWatcher perhaps

【问题讨论】:

    标签: android input-mask


    【解决方案1】:

    这里是使用TextWatcher创建自定义InputMask的示例

    创建这个覆盖TextWatcher的类

      public class SsnMask implements TextWatcher {
    
    private static final int MAX_LENGTH = 9;
    private static final int MIN_LENGTH = 3;
    
    private String updatedText;
    private boolean editing;
    
    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {
    
    }
    
    @Override
    public void onTextChanged(CharSequence text, int start, int before, int count) {
        if (text.toString().equals(updatedText) || editing) return;
    
        String digits = text.toString().replaceAll("\\D", "");
        int length = digits.length();
    
        if (length <= MIN_LENGTH) {
            updatedText = digits;
            return;
        }
    
        if (length > MAX_LENGTH) {
            digits = digits.substring(0, MAX_LENGTH);
        }
    
        if (length <= 5) {
            String firstPart = digits.substring(0, 3);
            String secondPart = digits.substring(3);
    
            updatedText = String.format(Locale.US, "%s-%s", firstPart, secondPart);
        }
        else {
            String firstPart = digits.substring(0, 3);
            String secondPart = digits.substring(3, 5);
            String thirdPart = digits.substring(5);
    
            updatedText = String.format(Locale.US, "%s-%s-%s", firstPart, secondPart, thirdPart);
        }
    }
    
    @Override
    public void afterTextChanged(Editable editable) {
        if (editing) return;
    
        editing = true;
    
        editable.clear();
        editable.insert(0, updatedText);
    
        editing = false;
    }
    

    }

    然后你就这样应用它

        ssnET = view.findViewById(R.id.ssnET);
        ssnET.addTextChangedListener(new SsnMask());
    

    【讨论】:

      【解决方案2】:

      input-mask-android 作者在这里。

      该库实际上可以与 Java 互操作。我们的 Wiki 中甚至还有一个 Quick Start 页面,其中包含 Java 示例代码。

      【讨论】:

        猜你喜欢
        • 2012-12-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-03-25
        相关资源
        最近更新 更多