以编程方式更改 inputType 后,EditText 允许任何操作
EditText allows anything after changing inputType programmatically
我有一个只接受数字的 editText。
我有 4 种类型:日期、年份、数学、琐事。
我使用复选框在这些类型之间切换。
InputType 变化如下:
- 日期:null(用户将点击编辑文本来选择日期)年份,
- 数学,琐事:signed_number
默认情况下,输入类型设置为知识问答,我只能输入数字,但当我至少在我的类型之间切换一次时,我可以输入任何内容。它仅适用于 Date 类型。
处理这一切的监听器:
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
其他都是flag。如果要设置标志,则必须使用 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
我有一个只接受数字的 editText。 我有 4 种类型:日期、年份、数学、琐事。 我使用复选框在这些类型之间切换。
InputType 变化如下:
- 日期:null(用户将点击编辑文本来选择日期)年份,
- 数学,琐事:signed_number
默认情况下,输入类型设置为知识问答,我只能输入数字,但当我至少在我的类型之间切换一次时,我可以输入任何内容。它仅适用于 Date 类型。
处理这一切的监听器:
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
其他都是flag。如果要设置标志,则必须使用 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