13

我知道这个问题已经问了好几次了,但在我的情况下没有一个答案有效。

我在以下链接中发现了一些相同类型的问题和答案,这对我根本不起作用。

链接1

链接2

在我的布局文件中,我定义了我的 EditText 如下。

 <EditText
    android:id="@+id/test_editText"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true"
    android:layout_marginLeft="16dp"
    android:layout_marginTop="90dp"
    android:inputType="textCapWords"
    android:ems="10" >

同样在 Activity 类的onCreate方法中我添加了以下代码。

    EditText testEditText = (EditText) findViewById(R.id.test_editText);
    testEditText.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_CAP_WORDS); 

如果有人遇到过同样的问题并解决了它想听听我在我的情况下做错了什么。谢谢。

编辑...

按照上面解释的步骤,我无法完成它(用户键入时自动将每个单词的首字母大写)。

根据我的代码,当用户键入时,它会以小写形式显示所有单词(包括第一个单词)中的第一个字符。

4

10 回答 10

13
android:inputType="textCapWords"

为我工作

我在问题中使用了相同的 xml 代码:

<EditText
    android:id="@+id/test_editText"
    android:layout_width="wrap_content"
    android:layout_height="50dp"
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true"
    android:layout_marginLeft="16dp"
    android:layout_marginTop="90dp"
    android:ems="10"
    android:inputType="textCapWords" >

只需检查您是否覆盖了inputTypeActivity 中的属性。

只需尝试不更改 Activity 中的任何内容。

于 2013-06-11T11:21:48.513 回答
10
testEditText.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_CAP_WORDS);   

or android:inputType="textCapSentences" 

仅当您的设备键盘启用自动大写设置时才有效。

于 2014-03-11T09:46:41.973 回答
5

这就是我所做的。android:inputType="textCapWords"也不适合我。

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) {
            //Use WordUtils.capitalizeFully if you only want the first letter of each word to be capitalized
            String capitalizedText = WordUtils.capitalize(editText.getText().toString());
            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);
}
于 2014-12-03T06:59:03.480 回答
1

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

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

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

setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_CAP_WORDS);

于 2017-06-27T06:12:05.013 回答
0

你试过 android:inputType="textPersonName"

于 2013-06-11T11:04:42.243 回答
0

您应该尝试使用 android:inputType="textCapSentences" 吗?

于 2013-06-11T11:07:09.977 回答
0

你在尝试模拟器还是安卓设备?这在模拟器 android:inputType="textCapWords" 中对我有用

于 2014-08-07T06:09:46.393 回答
0

只需将此代码添加到您的 EditTextandroid:capitalize="words"就可以了。

于 2015-08-24T11:47:30.563 回答
0
  1. 要将每个单词的首字母大写,请使用

    android:inputType="textCapWords" 输出:

    简单的文本文本_

  2. 要将每个句子的第一个字母大写,然后使用

    android:inputType="textCapSentences" 输出:

    是第一个陈述。是第二个陈述。

  3. 将所有字母大写

    android:inputType="textCapCharacters"

输出:这是简单的文本

注意:在输出中,仅用于格式化答案的粗体字母。上述属性并不强制这些大写。用户可以输入小写字母。

于 2018-08-25T09:11:16.133 回答
-1

在你的布局上试试这个......

android:inputType="textCapWords|textCapSentences"

对我有用..希望它也对你有用...

于 2014-10-15T07:35:44.603 回答