我创建了一个用于 IP 控制的编辑文本。输入一定数量的数字后,我会自动在文本中添加一个点。我使用 addTextChangedListener 执行此操作。由于我在 XML 端制作了输入类型文本,因此它也允许字母输入,但这种情况不应该发生。对于解决方案,我将 xml 输入类型设置为数字,这次 addTextChangedListener 部分被破坏,因为它接收可编辑值作为输入。我该如何解决它?
我正在尝试仅从文本类型输入中获取数字,但由于文本类型,也可以打印字母。
您可以使用InputType.Number与Textwatcher的组合来实现您想要的。以下是您想要实现的目标的基本概述。
ipAddressEditText.addTextChangedListener(object : TextWatcher {
override fun beforeTextChanged(charSequence: CharSequence?, start: Int, count: Int, after: Int) {
}
override fun onTextChanged(charSequence: CharSequence?, start: Int, before: Int, count: Int) {
}
override fun afterTextChanged(editable: Editable?) {
if (!editable.isNullOrBlank()) {
val currentText = editable.toString()
val dottedText= currentText.filter { it.isDigit() }
val formattedText = buildString {
var currentIndex = 0
for (i in 1..4) {
val endIndex = (currentIndex + 3).coerceAtMost(dottedtext.length)
append(dottedText.substring(currentIndex, endIndex))
if (endIndex < dottedText.length) {
append('.')
}
currentIndex = endIndex
}
}
if (currentText != formattedText) {
ipAddressEditText.setText(formattedText)
ipAddressEditText.setSelection(formattedText.length)
}
}
}
})