【问题标题】:How to capitalize every word in EditText?如何将 EditText 中的每个单词大写?
【发布时间】:2020-02-07 17:43:48
【问题描述】:

我想将在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
}

【问题讨论】:

  • 请参阅此answer link。你会发现 2 种方法。

标签: android kotlin android-edittext


【解决方案1】:

您可以尝试通过类似的方式实现这一目标

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

【讨论】:

  • toLowerCase 是问题所在。因为大写不会将整个字符串更改为更低。它只检查第一个字符
【解决方案2】:

【讨论】:

    猜你喜欢
    • 2020-12-22
    • 1970-01-01
    • 2021-10-05
    • 2021-08-08
    • 1970-01-01
    • 2014-02-04
    • 1970-01-01
    • 1970-01-01
    • 2015-11-10
    相关资源
    最近更新 更多