如何控制 Android Studio Java 上的文本类型 edittext 仅输入数字?

问题描述 投票:0回答:1

我创建了一个用于 IP 控制的编辑文本。输入一定数量的数字后,我会自动在文本中添加一个点。我使用 addTextChangedListener 执行此操作。由于我在 XML 端制作了输入类型文本,因此它也允许字母输入,但这种情况不应该发生。对于解决方案,我将 xml 输入类型设置为数字,这次 addTextChangedListener 部分被破坏,因为它接收可编辑值作为输入。我该如何解决它?

我正在尝试仅从文本类型输入中获取数字,但由于文本类型,也可以打印字母。

java android android-edittext
1个回答
0
投票

您可以使用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)
                }
            }
        }
    })
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.