在 addTextChangedListener 上将 editText 文本设置为大写,使应用程序挂起
Set editText text to upper case on addTextChangedListener making app hang
即使用户在 edittext
中写的是小写字母,我也想将其设为大写字母。因此我将 ediText
文本设置为 addTextChangedListener
中的大写字母,如下所示。
editText.addTextChangedListener(object : TextWatcher{
override fun beforeTextChanged(s : CharSequence?, start : Int, count : Int, after : Int) {
}
override fun onTextChanged(s : CharSequence?, start : Int, before : Int, count : Int) {
editText.setText(s.toString().toUpperCase())
}
override fun afterTextChanged(s : Editable?) {
}
})
但是当我在 editText
中输入内容时执行此操作时,应用程序挂起,我必须终止该应用程序并重新启动它 again.As 我想在绑定适配器中使用它我无法使用xml
的 AllCaps 方法
您需要在编辑 EditText
的文本之前删除 textwatcher
并在更改完成后重新添加它。
val watcher: TextWatcher = object : TextWatcher {
override fun beforeTextChanged(s: CharSequence, start: Int, count: Int, after: Int) {
}
override fun onTextChanged(s: CharSequence, start: Int, before: Int, count: Int) {
editText.removeTextChangedListener(this)
editText.setText(s.toString().toUpperCase())
editText.addTextChangedListener(this)
}
override fun afterTextChanged(s: Editable) {}
}
editText.addTextChangedListener(watcher)
您可以在 xml 中或以编程方式使用输入类型。
editText.inputType == InputType.TYPE_TEXT_FLAG_CAP_CHARACTERS
在你的xml你可以放
android:inputType="textCapCharacters"
此解决方案会自动将输入转为大写
即使用户在 edittext
中写的是小写字母,我也想将其设为大写字母。因此我将 ediText
文本设置为 addTextChangedListener
中的大写字母,如下所示。
editText.addTextChangedListener(object : TextWatcher{
override fun beforeTextChanged(s : CharSequence?, start : Int, count : Int, after : Int) {
}
override fun onTextChanged(s : CharSequence?, start : Int, before : Int, count : Int) {
editText.setText(s.toString().toUpperCase())
}
override fun afterTextChanged(s : Editable?) {
}
})
但是当我在 editText
中输入内容时执行此操作时,应用程序挂起,我必须终止该应用程序并重新启动它 again.As 我想在绑定适配器中使用它我无法使用xml
您需要在编辑 EditText
的文本之前删除 textwatcher
并在更改完成后重新添加它。
val watcher: TextWatcher = object : TextWatcher {
override fun beforeTextChanged(s: CharSequence, start: Int, count: Int, after: Int) {
}
override fun onTextChanged(s: CharSequence, start: Int, before: Int, count: Int) {
editText.removeTextChangedListener(this)
editText.setText(s.toString().toUpperCase())
editText.addTextChangedListener(this)
}
override fun afterTextChanged(s: Editable) {}
}
editText.addTextChangedListener(watcher)
您可以在 xml 中或以编程方式使用输入类型。
editText.inputType == InputType.TYPE_TEXT_FLAG_CAP_CHARACTERS
在你的xml你可以放
android:inputType="textCapCharacters"
此解决方案会自动将输入转为大写