25

我有一个这样的editTexts数组:

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

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

4

11 回答 11

24

您还需要告诉它来自“类”文本:

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 有常量,使用它们而不是复制值并冒最终破坏代码的风险。)

于 2013-09-19T15:01:35.667 回答
18

这将使写入时所有字符都大写。

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

原始答案在这里

于 2016-03-16T14:32:34.540 回答
12

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

在 XML 中应用大写

将以下内容添加到 EditText XML:

android:inputType="textCapCharacters"

将大写字母作为唯一过滤器应用于 Java 中的 EditText

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

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

将大写字母添加到 Java 中 EditText 的现有过滤器

要保留 EditText 已经应用的过滤器,比如 inputType、maxLength 等,您需要检索应用的过滤器,将大写过滤器添加到这些过滤器,并将它们设置回 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);
于 2017-09-28T15:11:44.600 回答
6

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

例子 :

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

编辑 :

将此属性添加到您的xmlEditText中的标记:layout

 android:textAllCaps="true"

或者:

如果您希望用户输入的任何内容都是大写的,您可以实现 aTextWatcher并使用EditText addTextChangedListener添加它,onTextChange方法上的 an 获取用户输入并将其替换为相同的大写文本。

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

};
于 2012-12-04T15:16:03.043 回答
6

你可以试试这个:

android:inputType="textCapCharacters"

它对我有用。=)

于 2016-10-25T11:35:11.320 回答
3

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

android:inputType="textCapSentences"

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

android:inputType="textCapWords"

大写每个字符使用:

android:inputType="textCapCharacters"

于 2019-03-13T08:10:51.713 回答
2

截至今天,其

android:inputType="textCapCharacters"

于 2018-09-12T19:12:18.900 回答
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 将仅对软键盘有效。

于 2021-01-25T12:24:21.980 回答
0

这会起作用

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

0x00001001 对应于“textCapCharacters常量。

于 2012-12-04T15:25:10.573 回答
0

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

android:capitalize="sentences"
于 2014-03-18T06:26:07.683 回答
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 });
于 2017-06-07T16:32:02.680 回答