在addTextChangedListener上将editText文本设置为大写,使应用程序挂起



即使用户在edittext中写小写,我也希望使用大写。因此,我在addTextChangedListener上将ediText文本设置为大写,如下所示。

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中键入一些内容时,应用程序挂起了,我必须杀死该应用程序并重新启动它。因为我想在绑定适配器中使用它,所以我不能使用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中使用Input类型,也可以通过编程方式使用。

editText.inputType == InputType.TYPE_TEXT_FLAG_CAP_CHARACTERS

在您的xml中,您可以放置

android:inputType="textCapCharacters"

此解决方案将自动将输入转到UperCase

最新更新