如何在EditText中大写每个单词?

时间:2019-10-10 09:54:24

标签: android kotlin android-edittext

我想大写EditTextonTextChanged中键入的每个单词。我已经尝试了一些解决方案,但没有一个起作用。问题是,如果您在键盘上更改大写字母,然后键入James JoNEs,则在将E字符键入Jone后,它应该修复该String以更正格式。这不适用于默认的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
}

2 个答案:

答案 0 :(得分:3)

您可以尝试通过类似这样的方式实现

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

答案 1 :(得分:1)

尝试阅读有关InputType.TYPE_TEXT_FLAG_CAP_WORDS和此example

的信息