关于android:EditText的首字母大写

First letter capitalization for EditText

我正在开发一个小小的个人待办事项列表应用程序,到目前为止,一切都运行良好。 我想知道一个小怪癖。 每当我去添加一个新项目时,我都会看到一个带有EditText视图的Dialog。 当我选择EditText视图时,键盘会按原样输入文本。 在大多数应用程序中,默认似乎是为第一个字母保留shift键...虽然它不会为我的视图执行此操作。 必须有一个简单的方法来修复,但我已经反复搜索引用,无法找到它。 我认为必须有一个由适配器加载的引用的xml属性,但我无法找出它是什么。


静态地(即在您的布局XML文件中):在EditText上设置android:inputType="textCapSentences"

以编程方式:您必须在EditTextInputType中包含InputType.TYPE_CLASS_TEXT,例如

1
2
EditText editor = new EditText(this);
editor.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_CAP_SENTENCES);

Can be combined with text and its variations to request capitalization of the first character of every sentence.

- 谷歌文档


只需在EditText元素中使用android:inputType="textCapWords"即可。

例如:

1
2
3
4
5
6
7
8
9
<EditText
    android:id="@+id/txtName"
    android:layout_width="0dp"
    android:layout_height="40dp"
    android:layout_weight="0.7"
    android:inputType="textCapWords"
    android:textColorHint="#aaa"
    android:hint="Name Surname"
    android:textSize="12sp" />

请参考以下链接以供参考:
http://developer.android.com/reference/android/widget/TextView.html#attr_android%3ainputType


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

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


在XML中的EditText中应用以下行。

1
android:inputType="textCapSentences|textMultiLine"

它还将允许多线支持。


我遇到了同样的问题,只是分享我发现的东西。可能会帮助你和其他人......

在你的layout.add EditText下面的行中尝试这个。

1
android:inputType="textCapWords|textCapSentences"

在我身上工作正常..希望它也适用于你......


我可以向你保证,答案将成为首字母大写,并且不会使edittext单行。

如果你想在下面的XMl中执行它是代码

1
android:inputType="textCapWords|textCapSentences"

如果想在活动/片段等中进行下面的代码

1
momentTextView.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_CAP_WORDS | InputType.TYPE_TEXT_FLAG_MULTI_LINE)

PS:如果你还有其他财产也可以轻松添加管道"|"符号,只需确保属性属性之间的xml中没有空格


对于EditText中的大写,您可以选择以下两种输入类型:

  • android:inputType="textCapSentences"
  • android:inputType="textCapWords"
  • textCapSentences
    这将在每个句子中将第一个单词的第一个字母作为Capital。

    textCapWords
    这将把每个单词的第一个字母作为Capital。

    如果你想要两个属性只使用|用两个属性签名

    1
    android:inputType="textCapSentences|textCapWords"

    在您的布局XML文件中:

    • 设置android:inputType="textCapSentences"

    • EditText上将每个句子的第一个单词的第一个字母作为首字母

    • 或者在EditText上使用android:inputType="textCapWords"将每个单词的第一个字母作为首字母


    在XML和JAVA文件中设置输入类型,如下所示,

    在XML中,

    android:inputType="textMultiLine|textCapSentences"

    它还允许多行和JAVA文件,

    1
    edittext.setRawInputType(InputType.TYPE_CLASS_TEXT|InputType.TYPE_TEXT_FLAG_CAP_SENTENCES);

    确保键盘的自动大写设置已启用。


    尝试此代码,它将使所有单词的第一个字符大写。

    - 为EditText视图设置addTextChangedListener

    edt_text.addTextChangedListener(观察者);

    - 添加TextWatcher

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    TextWatcher watcher = 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 if (input.length() > 1 && input.contains("")) {
                String fstr = input.substring(0, input.lastIndexOf("") + 1);
                if (fstr.length() == input.length()) {
                    capitalizedText = fstr;
                } else {
                    String sstr = input.substring(input.lastIndexOf("") + 1);
                    sstr = sstr.substring(0, 1).toUpperCase() + sstr.substring(1);
                    capitalizedText = fstr + sstr;
                }
            } else
                capitalizedText = input.substring(0, 1).toUpperCase() + input.substring(1);

            if (!capitalizedText.equals(edt_text.getText().toString())) {
                edt_text.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) {
                        edt_text.setSelection(mStart);
                        edt_text.removeTextChangedListener(this);
                    }
                });
                edt_text.setText(capitalizedText);
            }
        }
    };

    将此代码仅用于EditText的第一个字母大小写

    MainActivity.xml

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <EditText
            android:id="@+id/et"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:tag="true">
        </EditText>

    </RelativeLayout>

    MainActivity.java

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    EditText et = findViewById(R.id.et);
            et.addTextChangedListener(new TextWatcher() {
                public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
                }

                public void onTextChanged(CharSequence charSequence, int i, int i1, int i2)
                {
                    if (et.getText().toString().length() == 1 && et.getTag().toString().equals("true"))
                    {
                        et.setTag("false");
                        et.setText(et.getText().toString().toUpperCase());
                        et.setSelection(et.getText().toString().length());
                    }
                    if(et.getText().toString().length() == 0)
                    {
                        et.setTag("true");
                    }
                }

                public void afterTextChanged(Editable editable) {

                }
            });


    要进行大写,您可以使用编辑文本执行以下操作:

    要使每个单词的首字母大写:

    1
    android:inputType="textCapWords"

    要使每个句子的首字母大写:

    1
    android:inputType="textCapSentences"

    使每个字母大写:

    1
    android:inputType="textCapCharacters"

    但这只会对键盘和用户进行更改,可以在小写的情况下改变写信的模式。

    因此,如果您真的想要大写格式的数据,首先添加以下类,这种方法不太受欢迎:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    public class CapitalizeFirstLetter {
        public static String capitaliseName(String name) {
            String collect[] = name.split("");
            String returnName ="";
            for (int i = 0; i < collect.length; i++) {
                collect[i] = collect[i].trim().toLowerCase();
                if (collect[i].isEmpty() == false) {
                    returnName = returnName + collect[i].substring(0, 1).toUpperCase() + collect[i].substring(1) +"";
                }
            }
            return returnName.trim();
        }
        public static String capitaliseOnlyFirstLetter(String data)
        {
            return data.substring(0,1).toUpperCase()+data.substring(1);
        }
    }

    然后,

    现在把每个词都大写:

    1
    CapitalizeFirstLetter.capitaliseName(name);

    仅使用第一个词:

    1
    CapitalizeFirstLetter.capitaliseOnlyFirstLetter(data);

    编程

    1
    2
    TextView firstline = (TextView) findViewById(R.id.firstline);
    firstline.setAllCaps(true);

    我创立了我的解决方案:
    你有2种方法来解决它
    在java中:

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

    和xml:

    1
    2
    3
    4
    5
    6
     <EditText
    android:id="@+id/mytxt"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:inputType="textCapWords"
    android:textSize="12sp" />

    之前它曾经是android:capitalize="words",现已弃用。建议的替代方法是使用android:inputType="textCapWords"

    请注意,这仅适用于启用了设备键盘自动大写设置的情况。

    要以编程方式执行此操作,请使用以下方法:

    setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_CAP_WORDS);