EditText 的电话号码格式

问题描述

我正在使用库 input-mask-android用户输入时格式化文本。
我有一系列电话号码掩码。认情况下,选择数组中的第一个掩码。用户可以使用 Spinner 选择不同的蒙版。但是,当用户使用 Spinner 选择蒙版时,它不会像他希望的那样工作。 假设掩码数组包含两个掩码:["+12 - ###","+34 - ###"]。如果用户选择第二个掩码,则在 EditText 中键入时将出现以下内容: 输入 5 将: +34-512.
也就是输入后会自动放上之前掩码的关键字符。
我在 Kotlin 中的代码

        val listener: MaskedTextChangedListener = installOn(
                etPhoneNumber!!,maskT,affineFormats,AffinityCalculationStrategy.PREFIX,object : ValueListener {
                    override fun onTextChanged(
                            maskFilled: Boolean,extractedValue: String,formattedValue: String
                    ) {
                        logValueListener(maskFilled,extractedValue,formattedValue)
                        Log.e("CHANGE FORMAT:",affineFormats.toString())
                    }
                }
        )

maskT - 是选择的掩码 affineFormats - 存储最后一个掩码的动态数组。 任何建议将不胜感激。

解决方法

input-mask-android 图书馆作者在这里。

installOn 方法不适合您的需要。您必须在您的 MaskedTextChangedListener 上手动 initialise 一个 addTextChangedListener,然后 call 一个 EditText 方法。在选择掩码时,您必须确保移除先前的侦听器(通过在您的 removeTextChangedListener 上调用 EditText)。

installOn 方法不考虑可能有其他 TextWatcher 实例附加到您的 EditText。因此,所有已安装的听众都试图接管文本,同时添加他们自己的“+12”和“+34”前缀。