问题描述
我正在使用库 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”前缀。