EditText的首字母大写


383

我正在开发一个个人待办事项清单应用程序,到目前为止,一切都工作得很好。我想找出一个小怪癖。每当我要添加新项目时,我都会在对话框中显示一个EditText视图。当我选择EditText视图时,键盘会出现输入文字的信息。在大多数应用程序中,默认值似乎是按住Shift键用于第一个字母...尽管对于我而言,它不是这样做的。必须有一种简单的方法来修复,但是我反复搜索了引用,但找不到它。我认为适配器必须有一个xml属性供引用加载,但是我找不到它的含义。

Answers:


805

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

编程:你必须包括InputType.TYPE_CLASS_TEXTInputTypeEditText,如

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

可以与文本及其变体结合使用,以要求将每个句子的首字符大写。

- 谷歌文档


5
testEditText.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_CAP_WORDS); 或android:inputType =“ textCapSentences”仅在您的设备键盘启用了自动大写设置时才有效。
Lakshmanan 2014年

8
为什么启用此功能会使我android:lines="7"不再显示7行(现在默认返回1行)
James Wierzba

3
estEditText.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_CAP_WORDS); 或android:inputType =“ textCapSentences”仅在您的设备键盘启用了自动大写设置时才有效。以编程方式可以替代此方法吗?
斯威夫特

@JamesWierzba我将在此处将Shivang答案作为对多行支持的答复。添加android:inputType =“ textCapSentences | textMultiLine”
列宁

76

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

例如:

<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


优良作法是在代码元素中标记代码,而不是使其变粗。
拉维·巴特

13
这个答案并没有真正帮助OP的问题。这将大写每个单词的第一个字符,而不是输入文本(假定为句子)的第一个字符。虽然这可能会对其他人有所帮助,但正确的答案是已接受的答案。
Andrew T.

37

在XML的EditText中应用以下行。

android:inputType="textCapSentences|textMultiLine"

它还将允许多行支持。


2
那应该是一个可以接受的答案,因为这是不会将EditText折叠成单行的唯一解决方案
egorikem

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

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


谢谢,我被困住了,因为我只是禁用了设备键盘的自动大写设置
Pulkit

20

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

在您的布局上尝试此操作。在中添加以下行EditText

android:inputType="textCapWords|textCapSentences"

对我有效..希望对您也有效...


5

我可以向您保证,这两个答案都将首字母大写,而不会使edittext单行。

如果要在XMl中执行以下代码

android:inputType="textCapWords|textCapSentences"

如果要在活动/片段等中执行以下代码

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

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


5

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

  1. android:inputType =“ textCapSentences”
  2. android:inputType =“ textCapWords”

textCapSentences
这将使每个单词中第一个单词的首字母作为大写。

textCapWords 这将使每个单词的首字母大写。

如果您希望两个属性都使用| 用两个属性签名

android:inputType="textCapSentences|textCapWords"

3

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

-将addTextChangedListener设置为EditText视图

edt_text.addTextChangedListener(watcher);

-添加TextWatcher

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);
        }
    }
};

3

要大写,可以对编辑文本执行以下操作:

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

android:inputType="textCapWords"

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

android:inputType="textCapSentences"

使每个字母大写:

android:inputType="textCapCharacters"

但这只会更改键盘,用户可以在小写情况下更改写字母的模式。

因此,如果您确实想要大写格式的数据,请首先添加以下类,这种方法不太受赞赏:

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);
    }
}

然后,

现在大写每个单词:

CapitalizeFirstLetter.capitaliseName(name);

只用首字母大写:

CapitalizeFirstLetter.capitaliseOnlyFirstLetter(data);

2

像这样在XML和JAVA文件中设置输入类型,

在XML中,

android:inputType =“ textMultiLine | textCapSentences”

它还将允许在JAVA文件中使用多行

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

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


2

在您的布局XML文件中:

  • android:inputType="textCapSentences"

  • 在您EditText有每个句子作为资本的第一个字的拼音首

  • 或者android:inputType="textCapWords"在您的EditText上,将每个单词的第一个字母大写


1

使用此代码仅将EditText的首字母大写

MainActivity.xml

<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

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) {

            }
        });

0

以前是android:capitalize="words",现在已弃用。推荐的替代方法是使用android:inputType="textCapWords"

请注意,这仅在设备键盘的自动大写设置启用时有效。

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

setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_CAP_WORDS);


0

我创建了我的解决方案:您有两种方法可以在Java中解决它:

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

和xml:

 <EditText
android:id="@+id/mytxt"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textCapWords"
android:textSize="12sp" />


0

如果您在styles.xml中编写样式,则

删除android:inputType属性并添加以下行

<item name="android:capitalize">words</item>
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.