微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

以编程方式更改inputType后,EditText允许任何操作

如何解决以编程方式更改inputType后,EditText允许任何操作

我有一个 editText ,它仅接受数字。 我输入了4种类型:日期,年份,数学,琐事。 我使用复选框在这些类型之间切换。

InputType 的更改如下:

  • 日期:空(用户将点击editText来选择日期)Year
  • 琐事算术:signed_number

认情况下,输入类型设置为Trivia,并且我只能键入数字,但是当我在类型之间至少切换一次时,我可以键入任何内容。它仅适用于日期类型。

处理所有这些的监听器:

rgType.setonCheckedchangelistener { _,checkedId ->
        val checked = findViewById<RadioButton>(checkedId)
        numType = when (checked.text) {
            "Year" -> NumType.YEAR
            "Date" -> NumType.DATE
            "Math" -> NumType.MATH
            else -> NumType.TRIVIA
        }

        tNumber.setText("")
        tAnswer.text = ""
        when (numType) {
            NumType.DATE -> {
                tNumber.hint = "CHOOSE A DATE"
                tNumber.inputType = InputType.TYPE_NULL
                tNumber.hideKeyboard()
            }
            NumType.YEAR -> {
                tNumber.hint = "TYPE A YEAR"
                tNumber.inputType = InputType.TYPE_NUMBER_FLAG_SIGNED
                tNumber.hideKeyboard()
            }
            else -> {
                tNumber.hint = "TYPE A NUMBER"
                tNumber.inputType = InputType.TYPE_NUMBER_FLAG_SIGNED
                tNumber.hideKeyboard()
            }
        }
        Log.d("Input",tNumber.inputType.toString())
    }

**更新的代码:**

rgType.setonCheckedchangelistener { _,checkedId ->
        val checked = findViewById<RadioButton>(checkedId)
        numType = when (checked.text) {
            "Year" -> NumType.YEAR
            "Date" -> NumType.DATE
            "Math" -> NumType.MATH
            else -> NumType.TRIVIA
        }

        tNumber.setText("")
        tAnswer.text = ""
        when (numType) {
            NumType.DATE -> {
                tNumber.hint = "CHOOSE A DATE"
                tNumber.inputType = InputType.TYPE_NULL
                tNumber.hideKeyboard()
            }
            NumType.YEAR -> {
                tNumber.hint = "TYPE A YEAR"
                tNumber.inputType = InputType.TYPE_CLASS_NUMBER or InputType.TYPE_NUMBER_FLAG_SIGNED
                tNumber.hideKeyboard()
            }
            else -> {
                tNumber.hint = "TYPE A NUMBER"
                tNumber.inputType = InputType.TYPE_CLASS_NUMBER or InputType.TYPE_NUMBER_FLAG_SIGNED
                tNumber.hideKeyboard()
            }
        }
        Log.d("Input",tNumber.inputType.toString())
    }

解决方法

只有4种输入类型:

InputType.TYPE_CLASS_DATETIME
InputType.TYPE_CLASS_NUMBER
InputType.TYPE_CLASS_PHONE
InputType.TYPE_CLASS_TEXT

所有其他均为标志。如果要设置标志,则必须使用or运算符。 例子:

tNumber.inputType = InputType.TYPE_CLASS_DATETIME or InputType.TYPE_DATETIME_VARIATION_DATE

tNumber.inputType = InputType.TYPE_CLASS_TEXT or InputType.TYPE_TEXT_FLAG_CAP_CHARACTERS or InputType.TYPE_TEXT_FLAG_MULTI_LINE

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。