Android EditText(“文本框”):在用户输入时自动大写每个单词的第一个字母

时间:2013-06-11 10:56:10

标签: android android-widget android-edittext

我知道这个问题曾多次询问过,但我的案例中没有答案。

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

LINK1

LINK2

在我的布局文件中,我已按如下方式定义了我的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" >

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

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

如果有人遇到同样的问题并解决了,我想听听我的错误。谢谢。

编辑...

按照上述步骤,我无法完成此操作(在用户输入时自动将每个单词的第一个字母大写)。

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

10 个答案:

答案 0 :(得分:11)

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" >

只需检查您是否覆盖了活动中的inputType属性。

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

答案 1 :(得分:9)

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

or android:inputType="textCapSentences" 

仅在您的设备键盘启用自动大写设置时才能使用。

答案 2 :(得分: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);
}

答案 3 :(得分:0)

您是否尝试过android:inputType =“textPersonName”

答案 4 :(得分:0)

你应该尝试使用android:inputType =“textCapSentences”吗?

答案 5 :(得分:0)

你在试用Emulator还是android设备? 这对我在模拟器中起作用     机器人:的inputType =&#34; textCapWords&#34;

答案 6 :(得分:0)

只需将此代码添加到EditText android:capitalize="words"即可。

答案 7 :(得分:0)

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

请注意,这仅适用于您的设备键盘启用自动资本化设置。

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

setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_CAP_WORDS);

答案 8 :(得分:0)

  1. 使用每个单词的首字母大写

    android:inputType =“ textCapWords” 输出:

    T 他的我的 S 简单的 T ext。

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

    android:inputType =“ textCapSentences” 输出:

    T 是他的第一句话。 T 是第二种陈述。

  3. 将所有字母大写

    android:inputType =“ textCapCharacters”

输出: 这是简单的文字

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

答案 9 :(得分:-1)

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

android:inputType="textCapWords|textCapSentences"

对我很好..希望它对你有用......