如何小写可搜索项目的EditText中的文本?

时间:2012-04-04 12:38:44

标签: android

我在Android项目中使用了一个可搜索的项目和建议。它本质上是一个EditText

<searchable xmlns:android="http://schemas.android.com/apk/res/android"
    android:label="@string/app_name"
    android:hint="@string/search.hint" 
    android:includeInGlobalSearch="true"
    android:searchSettingsDescription="@string/search.hint"
    android:searchSuggestAuthority="com.xxx.android.provider.SearchSuggestionsProvider"
    android:searchSuggestSelection=" ?"
    android:inputType="text"
    android:imeOptions="actionSearch">
</searchable>

当我开始输入时,它显示为首字母大写。为什么?我希望它从小写开始。有可能吗?

10 个答案:

答案 0 :(得分:14)

我很惊讶这还没有一个好的答案。或许这是另一个我找不到的问题。

所以这是我的解决方案。

editText.setFilters(new InputFilter[] {
    new InputFilter.AllCaps() {
        @Override
        public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
            return String.valueOf(source).toLowerCase();
        }
    }
});

editText中的所有文字都是小写的,无论如何。

您可以随意修改字符串。
例如:您希望所有文本都是小写且不允许使用空格(假设它是电子邮件输入字段)

您可以将return ...替换为:

return String.valueOf(source).toLowerCase().replace(" ", "");

允许或拒绝个别字符的方式相同 此示例将所有eE替换为3

return String.valueOf(source).replace("e", "3").replace("E", "3");

等等。

我希望这有助于某人。

答案 1 :(得分:9)

如果您希望第一个字符在默认情况下为小写,则可以使用 - android:capitalize="none"。然后,您需要手动单击按钮以大写第一个字符。否则请关注this link.

答案 2 :(得分:5)

尝试,

android:digits="qwertyuiopasdfghjklzxcvbnm"

答案 3 :(得分:4)

有各种inputType选项,但没有专门用于保持文本小写。

您可能需要在此处查看完整列表: http://developer.android.com/reference/android/widget/TextView.html#attr_android:inputType

我希望“textUri”会做你想做的事。

在输入文本后,您始终只需对文本使用String.toLowerCase()函数。

否则,您可以添加TextWatcher添加到EditText,并根据您的特定条件验证每个输入事件。

答案 4 :(得分:2)

kotlin 中的解决方案:

editText.filters = arrayOf<InputFilter>(object : InputFilter.AllCaps() {
        override fun filter(source: CharSequence?, start: Int, end: Int, dest: Spanned?, dstart: Int, dend: Int) = 
              source.toString().toLowerCase()
        })

答案 5 :(得分:1)

如果您希望第一个字符变小

android:inputType="text"

答案 6 :(得分:0)

不确定建议的答案是否有效,但是我发现了一个错误,该错误影响了我以前使用的解决方案。在某些键盘(尤其是三星的键盘)中,启用“智能文本”后,字符将重复。

最好的解决方案是创建一个AllLowerInputFilter类,该类基本上是我根据Android自身的AllCaps实现改编的。它可以与我测试过的每个键盘一起使用,无论是否启用了“智能文本”。

class AllLowerInputFilter : InputFilter {

    override fun filter(source: CharSequence, start: Int, end: Int, dest: Spanned?, dstart: Int, dend: Int): CharSequence? {

        for (i in start until end) {
            if (source[i].isUpperCase()) {
                val v = CharArray(end - start)
                TextUtils.getChars(source, start, end, v, 0)
                val s = String(v).toLowerCase()

                return if (source is Spanned) {
                    val sp = SpannableString(s)
                    TextUtils.copySpansFrom(source, start, end, null, sp, 0)
                    sp
                } else {
                    s
                }
            }
        }

        return null // keep original
    }
}

可以这样使用:

editText.filters = arrayOf(AllLowerInputFilter())

答案 7 :(得分:0)

提供我的Kotlin解决方案

editText.filters = arrayOf(
        yourFilter01(), // if you have
        yourFilter02(),  // if you have
        InputFilter { source, _, _, _, _, _ ->
            source.toString().toLowerCase()
        }
)

答案 8 :(得分:0)

我的解决方案: 如果android:inputType设置为"textPassword",则所有内容均为小写。 因此,如果将其设置为"textVisiblePassword",则所有内容均为小写。

答案 9 :(得分:0)

基于@THEPATEL 的回答并丢弃 AllCaps 类,这里有一个更紧凑的版本(前提是您使用 Java 8):

\d