Android EditText("Textbox") :在用户输入时自动大写每个单词的首字母

Posted

技术标签:

【中文标题】Android EditText("Textbox") :在用户输入时自动大写每个单词的首字母【英文标题】:Android EditText("Textbox") : Auto capitalizing first letter of each word while user typing 【发布时间】:2013-06-07 04:53:21 【问题描述】:

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

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

LINK1

LINK2

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

 <EditText
    android:id="@+id/test_editText"
    android:layout_
    android:layout_
    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); 

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

编辑...

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

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

【问题讨论】:

如果删除 setInputType 行会发生什么? 那么你现在的问题是什么?它是否按预期工作,但您想做其他事情?它不工作吗?在什么情况下不起作用?它闪烁吗?您想在打字时进行实时更新吗?请更具体 您好 ZouZou,没有 setInputType 行它仍然一样。谢谢。 嗨 avalancha,我刚刚在我的问题的“编辑”中描述了更多内容。谢谢。 【参考方案1】:
android:inputType="textCapWords"

为我工作

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

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

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

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

【讨论】:

嗨 Archie.bpgc,我刚刚在 Activity 类的“onCreate”方法中注释了所有代码,现在无法以任何方式覆盖 inputtype attribyte。但是当用户输入时,如果用户没有通过键盘选项选择它是大写,默认情况下所有打印都是小写。我正在使用运行 android“2.1”操作系统的 android 设备,并且还使用模拟器进行了测试(使用 Nexus One 和 google 创建 - 虚拟设备管理器中的设备定义)。在您的情况下,它会在用户输入时自动以大写字母打印每个单词的首字母吗? 我在我的设备上试过(4.1.2)。是的,键盘以大写字母开头,当我单击空格键时,键盘变为全部大写字母。 嗨,我认为这不适用于早期的操作系统版本。是的,我刚刚检查过,它现在也适用于我的操作系统版本“4.0”。只需检查“2.1”或类似的东西(即使使用模拟器),它也不起作用......但问题是我正在寻找一种解决方案来处理高于“2.1”级别的所有操作系统版本。谢谢。 你有解决办法吗??我也面临与旧操作系统版本相同的问题,但还没有解决方案。如果您有解决方案,请帮助我。【参考方案2】:
testEditText.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_CAP_WORDS);   

or android:inputType="textCapSentences" 

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

【讨论】:

【参考方案3】:

这就是我所做的。 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);

【讨论】:

太棒了,但是当我尝试按返回清空编辑文本时会崩溃。找到了解决方案。编辑答案【参考方案4】:

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

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

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

setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_CAP_WORDS);

【讨论】:

【参考方案5】:

你试过 android:inputType="textPersonName"

【讨论】:

添加一个textChangeListener和设置case怎么样?【参考方案6】:

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

【讨论】:

试过这个。不是这个。谢谢。【参考方案7】:

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

【讨论】:

【参考方案8】:

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

【讨论】:

【参考方案9】:

    每个单词的首字母大写

    android:inputType="textCapWords" 输出:

    T他的S实现T分机

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

    android:inputType="textCapSentences" 输出:

    T这是第一句话。 T这是第二个声明。

    所有字母大写

    android:inputType="textCapCharacters"

输出: 这是简单的文字

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

【讨论】:

【参考方案10】:

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

android:inputType="textCapWords|textCapSentences"

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

【讨论】:

以上是关于Android EditText("Textbox") :在用户输入时自动大写每个单词的首字母的主要内容,如果未能解决你的问题,请参考以下文章

Android,Studio的EditText控件的回车监听事件无效

Android中EditText无法完全显示

Android--去除EditText边框,添加下划线

Android文本输入框EditText禁用分号

Android EditText获取焦点并弹出软键盘

android中如何更改EditText 的光标颜色?