如何使Android EditText中的每个字母大写?

我有一个editText的数组,我这样做:

inputs[i] = new EditText(this); inputs[i].setWidth(376); inputs[i].setInputType(InputType.TYPE_TEXT_FLAG_CAP_CHARACTERS); tFields.addView(inputs[i]); 

我希望每个angular色都被大写。 现在,第一个单词的第一个字母是小写,然后所有的字母都是大写。 我可以在用户input完成后将其转换为大写,但这并不是我所要做的。 有没有办法让这些领域按我希望的方式行事?

Solutions Collecting From Web of "如何使Android EditText中的每个字母大写?"

你需要告诉它它也是来自“class”文本:

 inputs[i] = new EditText(this); inputs[i].setWidth(376); inputs[i].setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_CAP_CHARACTERS); tFields.addView(inputs[i]); 

inputtypes是一个位掩码 。 您可以通过放置|来组合标志 (pipe道)字符在中间,代表OR逻辑function,即使在像这样的位掩码中使用,它的意思是“这个标志和其他标志”。

(这个答案和Robin的一样,但是没有“魔术数字”,这是你可以放在你的代码中的最糟糕的东西之一,Android API有常量,用它们来代替复制值和冒着最终破坏代码的风险。

这将使所有的字符写作时大写。

 edittext.setFilters(new InputFilter[] {new InputFilter.AllCaps()}); 

这里的原始答案。

只需使用String.toUpperCase()方法。

例如:

 String str = "blablabla"; editText.setText(str.toUpperCase()); // it will give : BLABLABLA 

编辑:

将此属性添加到您的EditText标签在您的layout xml中:

  android:textAllCaps="true" 

要么:

如果您希望用户input的内容为大写字母,则可以实现TextWatcher并使用EditText addTextChangedListener添加它, onTextChange方法获取用户input,并将其replace为大写的相同文本。

 editText.addTextChangedListener(upperCaseTextWatcher); final TextWatcher upperCaseTextWatcher = new TextWatcher() { public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) { } public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) { editText.setText(editText.getText().toString().toUpperCase()); editText.setSelection(editText.getText().toString().length()); } public void afterTextChanged(Editable editable) { } }; 

你可以试试这个:

 android:inputType="textCapCharacters" 

它为我工作。 =)

这将工作

  inputs[i] = new EditText(this); inputs[i].setWidth(376); inputs[i].setInputType(0x00001001); tFields.addView(inputs[i]); 

0x00001001对应于“ textCapCharacters常量。

尝试在你的xml中使用这一行代码:

 android:capitalize="sentences" 

出于某种原因,添加xml在我的设备上不起作用。

我发现一个文本filter工作到大写,就像这样

  EditText editText = (EditText) findViewById(R.id.editTextId); InputFilter toUpperCaseFilter = new InputFilter() { public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) { StringBuilder stringBuilder = new StringBuilder(); for (int i = start; i < end; i++) { Character character = source.charAt(i); character = Character.toUpperCase(character); // THIS IS UPPER CASING stringBuilder.append(character); } return stringBuilder.toString(); } }; editText.setFilters(new InputFilter[] { toUpperCaseFilter }); 

我知道这个问题有点老,但在这里解释了如何以不同的方式做到这一点:

在XML中应用UpperCase

将以下内容添加到EditText XML:

 android:textAllCaps="true" 

将UpperCase作为Java中EditText的唯一filter应用

这里我们将UpperCasefilter设置为EditText的唯一filter。 注意这个方法删除了所有以前添加的filter。

 editText.setFilters(new InputFilter[] {new InputFilter.AllCaps()}); 

将UpperCase添加到Java中EditText的现有filter

为了保留EditText的已经应用的filter,比方说inputType,maxLength等,你需要检索应用的filter,将UpperCasefilter添加到这些filter,并将它们设置回EditText。 下面是一个例子:

 InputFilter[] editFilters = editText.getFilters(); InputFilter[] newFilters = new InputFilter[editFilters.length + 1]; System.arraycopy(editFilters, 0, newFilters, 0, editFilters.length); newFilters[editFilters.length] = new InputFilter.AllCaps(); editText.setFilters(newFilters);