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

Jib*_*ibW 12 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" >
Run Code Online (Sandbox Code Playgroud)

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

    EditText testEditText = (EditText) findViewById(R.id.test_editText);
    testEditText.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_CAP_WORDS); 
Run Code Online (Sandbox Code Playgroud)

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

编辑...

按照上面介绍的步骤,我无法完成这项工作(在用户输入时自动将每个单词的第一个字母大写).

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

Arc*_*pgc 12

android:inputType="textCapWords"
Run Code Online (Sandbox Code Playgroud)

适合我

我在问题中使用了相同的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" >
Run Code Online (Sandbox Code Playgroud)

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

只需尝试不改变活动中的任何内容.


Lak*_*nan 9

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

or android:inputType="textCapSentences" 
Run Code Online (Sandbox Code Playgroud)

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


Ars*_*rst 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);
}
Run Code Online (Sandbox Code Playgroud)


Pra*_*chi 0

你试过 android:inputType="textPersonName"