如何将 EditText 中的每个单词大写?

How to capitalize every word in EditText?

我想在 onTextChanged 中将 EditText 中输入的每个单词大写。我尝试了一些解决方案,但其中 none 行得通。我面临的问题是,如果您更改键盘上的大写字母并键入 James JoNEs,它应该在您将 E 字符键入 Jone 后将该字符串修复为正确的形式。这不适用于默认 android:inputType="textCapWords"。我已经使用了一些我发现的功能,但它根本不起作用。

fun onFieldChanged(s: String, tv: TextWatcher, et: EditText) {
    et.removeTextChangedListener(tv)
    val changedString = capitalizeFirstLetterWord(s)
    with(et) {
        text.clear()
        append(changedString)
        setSelection(changedString.length)
    }
    et.addTextChangedListener(tv)
}

fun capitalizeFirstLetterWord(s: String): String{
    var finalStr = ""
    if(s != "") {
        val strArray = s.split("[\s']")
        if (strArray.isNotEmpty()) {
            for(i in strArray.indices){
                finalStr+= capitalize(strArray[i])
            }
        }
    }
    return finalStr
}

你可以尝试用这样的东西来实现

"yourString".split(" ").map { it.toLowerCase().capitalize() }.joinToString(" ")