关于java:如何大写Android EditText中的每个字母?

How to capitalize every letter in an Android EditText?

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

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

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


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

1
2
3
4
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]);

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

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


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

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

原来答案在这里。


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

例如:

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

编辑:

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

1
 android:textAllCaps="true"

要么:

如果您希望用户类型为大写,则可以实现TextWatcher并使用EditText addTextChangedListener添加它,在onTextChange方法上获取用户输入并将其替换为大写相同的文本。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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) {
}

};


你可以试试这个:

1
android:inputType="textCapCharacters"

它对我有用。 =)


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

在XML中应用UpperCase

将以下内容添加到EditText XML:

1
android:textAllCaps="true"

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

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

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

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

要保留EditText的已应用过滤器(例如inputType,maxLength等),您需要检索应用的过滤器,将UpperCase过滤器添加到这些过滤器,然后将它们设置回EditText。以下是一个示例:

1
2
3
4
5
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);

要将每个句子的第一个单词大写,请使用:

android:inputType="textCapSentences"

将每个单词的第一个字母用于大写:

android:inputType="textCapWords"

要将每个角色的使用资本化:

android:inputType="textCapCharacters"


截至今天,它

android:inputType="textCapCharacters"


这会奏效

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

0x00001001对应于"textCapCharacters常量。


出于某种原因,添加xml在我的设备上无效。

我发现文本过滤器适用于大写,就像这样

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
    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中使用这一行代码:

1
android:capitalize="sentences"