Android EditText允许在以编程方式更改inputType后执行任何操作

Android EditText允许在以编程方式更改inputType后执行任何操作,android,kotlin,android-edittext,Android,Kotlin,Android Edittext,我有一个只接受数字的编辑文本。 我有四种类型:日期、年份、数学、琐事。 我使用复选框在这些类型之间切换 InputType更改如下: 日期:空(用户将点击编辑文本选择日期)年 数学,琐事:有符号的数字 默认情况下,输入类型设置为Trivia,我只能键入数字,但当我在类型之间至少切换一次时,我可以键入任何内容。它仅在日期类型上正常工作 处理所有这些问题的侦听器: rgType.setOnCheckedChangeListener{{uu,checkedId-> val checked=find

我有一个只接受数字的编辑文本。 我有四种类型:日期、年份、数学、琐事。 我使用复选框在这些类型之间切换

InputType更改如下:

  • 日期:空(用户将点击编辑文本选择日期)年
  • 数学,琐事:有符号的数字
默认情况下,输入类型设置为Trivia,我只能键入数字,但当我在类型之间至少切换一次时,我可以键入任何内容。它仅在日期类型上正常工作

处理所有这些问题的侦听器:

rgType.setOnCheckedChangeListener{{uu,checkedId->
val checked=findViewById(checkedId)
numType=when(选中.text){
“年”->NumType.Year
“日期”->NumType.Date
“Math”->NumType.Math
else->NumType.TRIVIA
}
tNumber.setText(“”)
tAnswer.text=“”
何时(numType){
NumType.DATE->{
tNumber.hint=“选择日期”
tNumber.inputType=inputType.TYPE\u NULL
tNumber.hideKeyboard()
}
NumType.YEAR->{
tNumber.hint=“键入年份”
tNumber.inputType=inputType.TYPE\编号\标志\签名
tNumber.hideKeyboard()
}
其他->{
tNumber.hint=“键入一个数字”
tNumber.inputType=inputType.TYPE\编号\标志\签名
tNumber.hideKeyboard()
}
}
Log.d(“输入”,tNumber.inputType.toString())
}
**更新代码:**

rgType.setOnCheckedChangeListener{{uu,checkedId->
val checked=findViewById(checkedId)
numType=when(选中.text){
“年”->NumType.Year
“日期”->NumType.Date
“Math”->NumType.Math
else->NumType.TRIVIA
}
tNumber.setText(“”)
tAnswer.text=“”
何时(numType){
NumType.DATE->{
tNumber.hint=“选择日期”
tNumber.inputType=inputType.TYPE\u NULL
tNumber.hideKeyboard()
}
NumType.YEAR->{
tNumber.hint=“键入年份”
tNumber.inputType=inputType.TYPE\类别\编号或inputType.TYPE\编号\标志\签名
tNumber.hideKeyboard()
}
其他->{
tNumber.hint=“键入一个数字”
tNumber.inputType=inputType.TYPE\类别\编号或inputType.TYPE\编号\标志\签名
tNumber.hideKeyboard()
}
}
Log.d(“输入”,tNumber.inputType.toString())
}

只有4种输入类型:

InputType.TYPE_CLASS_DATETIME
InputType.TYPE_CLASS_NUMBER
InputType.TYPE_CLASS_PHONE
InputType.TYPE_CLASS_TEXT
其他的都是国旗。如果要设置标志,必须使用
运算符。 示例:

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

很有效,谢谢。但是我如何设置没有输入的错误呢?
InputType。TYPE_NULL
也是一个有效的类型。有一个奇怪的错误,即使它为NULL,有时我也可以在编辑文本中写入。你能告诉我重现错误的步骤吗?试试这个
isFocusableInTouchMode=false
并使用
isFocusableInTouchMode=true使其再次聚焦;isFocusable=true