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

时间:2012-12-04 15:00:46

标签: 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]);

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

10 个答案:

答案 0 :(得分: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]);

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

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

答案 1 :(得分:12)

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

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

原始答案here

答案 2 :(得分:5)

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

示例:

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

编辑:

将此属性添加到EditText xml:

中的layout标记
 android:textAllCaps="true"

或者:

如果您希望任何用户类型都是大写的,您可以实现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) { } }; 方法用户输入并用大写的相同文本替换它。

{{1}}

答案 3 :(得分:4)

你可以试试这个:

android:inputType="textCapCharacters"

它对我有用。 =)

答案 4 :(得分:2)

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

在XML中应用UpperCase

将以下内容添加到EditText XML:

android:textAllCaps="true"

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

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

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

将UpperCase添加到Java中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);

答案 5 :(得分:1)

这样可行

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

0x00001001对应于“textCapCharacters常量。

答案 6 :(得分:1)

您所要做的就是为 EditText 视图设置正确的输入类型:

editText.inputType == InputType.TYPE_TEXT_FLAG_CAP_CHARACTERS

作为替代,您可以使用 InputFilter。我在这里创建了一个 Kotlin 扩展

fun EditText.allCaps() {
    val newFilters = this.filters.copyOf(this.filters.size + 1)

    newFilters[newFilters.size - 1] = InputFilter.AllCaps()

    this.filters = newFilters
}

我更喜欢使用这两种方法。请注意 InputFilter 也适用于硬件键盘,而 InputType 仅对软键盘有效。

答案 7 :(得分:0)

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

android:capitalize="sentences"

答案 8 :(得分:0)

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

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

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

答案 9 :(得分:0)

截至今天,其

android:inputType="textCapCharacters"