Как использовать каждое слово в EditText? - PullRequest
0 голосов
/ 10 октября 2019

Я хочу прописать каждое слово, набранное EditText внутри onTextChanged. Я пробовал некоторые решения, но ни одно из них не сработало. Проблема, с которой я сталкиваюсь, заключается в том, что если вы измените заглавную букву на клавиатуре, и вы введете 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
}

Ответы [ 2 ]

3 голосов
/ 10 октября 2019

Вы можете попытаться достичь этого с помощью чего-то подобного

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

1 голос
/ 10 октября 2019

попробуйте прочитать о InputType.TYPE_TEXT_FLAG_CAP_WORDS и этот пример

...