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

cla*_*vio 17 java android android-edittext

我有一个editTexts数组,我这样做:

        inputs[i] = new EditText(this);
        inputs[i].setWidth(376);
        inputs[i].setInputType(InputType.TYPE_TEXT_FLAG_CAP_CHARACTERS);
        tFields.addView(inputs[i]);
Run Code Online (Sandbox Code Playgroud)

我希望每个角色都能被大写.现在,第一个单词的第一个字母是小写,然后所有字符后面都是大写.我可以在完成后将用户输入的内容转换为大写,但这并不是我想要的.有没有办法让这些字段按照我希望的方式运行?

tik*_*tak 20

你需要告诉它它来自"类"文本:

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]);
Run Code Online (Sandbox Code Playgroud)

输入类型位掩码.您可以通过放置|来组合标志 中间的(管道)字符,代表OR逻辑功能,即使在像这样的位掩码中使用它意味着"这个标志和那个其他标志".

(这个答案与Robin相同,但没有"魔术数字",这是您可以在代码中加入的最糟糕的事情之一.Android API有常量,使用它们而不是复制值并冒着最终破坏代码的风险.)


jze*_*ino 13

这将使所有字符在写入时变为大写.

edittext.setFilters(new InputFilter[] {new InputFilter.AllCaps()});
Run Code Online (Sandbox Code Playgroud)

原来答案在这里.


小智 6

你可以试试这个:

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

它对我有用。=)


Hou*_*ine 5

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

例如:

String str = "blablabla";
editText.setText(str.toUpperCase()); // it will give : BLABLABLA
Run Code Online (Sandbox Code Playgroud)

编辑:

将此属性添加到xml中的EditText标记layout:

 android:textAllCaps="true"
Run Code Online (Sandbox Code Playgroud)

要么:

如果你想要用户类型为大写,你可以实现一个TextWatcher并使用它EditText addTextChangedListener来添加它,在onTextChange方法上取用户输入并用大写的相同文本替换它.

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) {
}

};
Run Code Online (Sandbox Code Playgroud)


Ric*_*rdo 5

我知道这个问题有点老了,但在这里说明了如何以不同的方式来做:

在XML中应用UpperCase

将以下内容添加到EditText XML:

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

将UpperCase作为Java中EditText的唯一过滤器

在这里,我们将UpperCase过滤器设置为EditText的唯一过滤器。请注意,此方法将删除所有以前添加的过滤器。

editText.setFilters(new InputFilter[] {new InputFilter.AllCaps()});
Run Code Online (Sandbox Code Playgroud)

在Java中将UpperCase添加到EditText的现有过滤器中

要保留已应用的EditText过滤器,例如inputType,maxLength等,您需要检索已应用的过滤器,将UpperCase过滤器添加到这些过滤器,然后将它们设置回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);
Run Code Online (Sandbox Code Playgroud)