如何强制EditText以大写字母开头的文本?


78

我有一个EditText,我需要其中的文本(当用户键入时)以大写字母开头。


3
+1表示可搜索性:P
显示名称

Answers:


160

如果同时添加android:capitalize="sentences"android:inputType="text",请小心,因为后者似乎优先于第一个,并且输入内容不会大写。

有一个inputType自动将首字母大写的方法:

android:inputType="textCapSentences"

参见http://developer.android.com/reference/android/widget/TextView.html#attr_android:inputType


1
不错的提示!我两者兼有,它在Nexus One和Galaxy Nexus上都能正常工作。但是在HTC Sense设备上,单词没有大写。android:inputType是诀窍。
BoD 2012年

10
警告词:由于在我的情况下该字段将是一个人的名字,因此我设置了android:inputType =“ textPersonName”。这没有按预期工作:我必须使用android:inputType =“ textCapWords”来获取名称的每个单词以大写。
杰夫G

2
机器人:利用=“句子”不应该使用这个标签bcuz它已经过时
pioneerBhawna

如果android:inputType =“ textMultiLine”怎么办?
KRP 2014年

11
然后使用android:inputType="textMultiLine|textCapSentences"
4mnes7y 2014年

23

android:capitalize的选项是

android:inputType="none", which won't automatically capitalize anything.

android:inputType="sentences", Which will capitalize the first word of each sentence.

android:inputType="words", Which Will Capitalize The First Letter Of Every Word.

android:inputType="characters", WHICH WILL CAPITALIZE EVERY CHARACTER.

显然,它已更改为inputType而不是capitalize


3
不建议使用此方法。
h8pathak '16

应使用@ h8pathak inputType来支持此方法。
乔尔·迪恩

17

使用

android:inputType="textPersonName|textCapWords"

因为仅使用"textPersonName"是不够的,所以姓名的首字母大写。

与邮寄地址类似:

android:inputType="textPostalAddress|textCapSentences"

不适用于“ da Silva”或“ von Anhalt”之类的名称。
火腿

8

将此添加到您的 XML

 android:inputType="textCapWords"

android:inputType="textCapSentences"将适用于句子。但是,我需要在全名字段中大写每个单词。


6

试试这个

testEditText.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_CAP_WORDS);

android:inputType="textCapSentences"仅在启用设备键盘的自动大写设置时才有效。


接受的答案很好,但是我正在寻找编码答案,这个可行。tx
Boris Gafurov


3

您使用了“强制”一词。所以尝试一下。只需将您的edittext作为参数传递即可。

public static void setCapitalizeTextWatcher(final EditText editText) {
    final TextWatcher textWatcher = new TextWatcher() {

        int mStart = 0;

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {

        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            mStart = start + count;
        }

        @Override
        public void afterTextChanged(Editable s) {
             String input = s.toString();
            String capitalizedText;
            if (input.length() < 1)
                capitalizedText = input;
            else
                capitalizedText = input.substring(0, 1).toUpperCase() + input.substring(1);
            if (!capitalizedText.equals(editText.getText().toString())) {
                editText.addTextChangedListener(new TextWatcher() {
                    @Override
                    public void beforeTextChanged(CharSequence s, int start, int count, int after) {

                    }

                    @Override
                    public void onTextChanged(CharSequence s, int start, int before, int count) {

                    }

                    @Override
                    public void afterTextChanged(Editable s) {
                        editText.setSelection(mStart);
                        editText.removeTextChangedListener(this);
                    }
                });
                editText.setText(capitalizedText);
            }
        }
    };

    editText.addTextChangedListener(textWatcher);
}



1

将此粘贴到您的edittext(xml)中:

  android:capitalize="sentences"

1
edittext.setFilters(new InputFilter[] {new InputFilter.AllCaps()});

尽管此代码段可以解决问题,但提供说明确实有助于提高您的帖子质量。请记住,您将来会为读者回答这个问题,而这些人可能不知道您提出代码建议的原因。也请尽量不要在代码中添加解释性注释,这会降低代码和解释的可读性!
Ashish Ahuja

1

如果您遇到设置android:inputType = textCapSentences的烦人案例,然后以单行EditText结尾的情况,请使用以下解决方案:

    android:inputType="textCapSentences|textMultiLine"
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.