166

在我的 Android 应用程序中,我有不同EditText的用户可以输入信息的位置。但我需要强制用户用大写字母书写。你知道这样做的功能吗?

4

24 回答 24

373

Android 实际上有一个内置的 InputFilter

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

小心,setFilters 将重置通过 XML 设置的所有其他属性(即maxLines,,inputType... imeOptinos)。为了防止这种情况,请将您的过滤器添加到现有的过滤器中。

InputFilter[] editFilters = <EditText>.getFilters();
InputFilter[] newFilters = new InputFilter[editFilters.length + 1];
System.arraycopy(editFilters, 0, newFilters, 0, editFilters.length);
newFilters[editFilters.length] = <YOUR_FILTER>;  
<EditText>.setFilters(newFilters);
于 2014-08-29T15:26:29.270 回答
130

如果你想强制用户在 EditText 中默认使用大写字母,你只需要添加android:inputType="textCapCharacters". (用户仍然可以手动更改为小写。)

于 2013-10-24T02:04:16.743 回答
25

仅通过 XML 强制大写锁定是不可能的。第三方库也无济于事。您可以toUpper()在接收端对文本执行 a 操作,但无法在键盘端阻止它

您可以使用 XML 将键盘设置为大写锁定。

爪哇

您可以将 设置input_typeTYPE_CLASS_TEXT| TYPE_TEXT_FLAG_CAP_CHARACTERSkeyboard应该尊重这一点。

科特林

android:inputType="textCapCharacters"

于 2013-04-12T01:57:28.093 回答
23

您可以使用两种方式。

第一种方式:

android:inputType="textCapSentences"在您的 EditText 上设置。

第二种方式:

当用户输入数字时,您必须使用文本观察器并将小写字母更改为大写字母。

edittext.addTextChangedListener(new TextWatcher() {

    @Override
    public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {            

    }
        @Override
    public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
                    int arg3) {             
    }
    @Override
    public void afterTextChanged(Editable et) {
          String s=et.toString();
      if(!s.equals(s.toUpperCase()))
      {
         s=s.toUpperCase();
         edittext.setText(s);
         edittext.setSelection(edittext.length()); //fix reverse texting
      }
    }
});  
于 2013-04-12T05:02:36.873 回答
14

您可以将该android:textAllCaps="true"属性添加到 EditText 中的 xml 文件中。这将强制软输入键盘以全部大写模式出现。您输入的值将以大写形式显示。但是,这并不能确保用户只能输入UpperCase字母。如果他们愿意,他们仍然可以回退到小写字母。如果要确保输出Edittext全部大写,则必须使用类的toUpperCase()方法手动转换输入字符串String

于 2015-02-20T10:53:48.310 回答
14

使用输入过滤器

editText = (EditText) findViewById(R.id.enteredText);
editText.setFilters(new InputFilter[]{new InputFilter.AllCaps()});
于 2017-12-13T06:05:36.153 回答
13

您应该将android:inputType="textCapCharacters"Edittext 放在 xml 文件中。

于 2015-04-29T08:20:03.350 回答
13

更好... Kotlin中的一个班轮...

// gets your previous attributes in XML, plus adds AllCaps filter    
<your_edit_text>.setFilters(<your_edit_text>.getFilters() + InputFilter.AllCaps())

完毕!

于 2017-11-07T17:23:24.403 回答
12

与其担心处理键盘,为什么不接受任何输入,小写或大写并将字符串转换为大写?

以下代码应该会有所帮助:

EditText edit = (EditText)findViewById(R.id.myEditText);
String input;
....
input = edit.getText();
input = input.toUpperCase(); //converts the string to uppercase

这是用户友好的,因为用户不必知道您需要大写字符串。希望这可以帮助。

于 2013-04-12T02:01:26.590 回答
10

对我来说,它通过添加android:textAllCaps="true"android:inputType="textCapCharacters"

<android.support.design.widget.TextInputEditText
                    android:layout_width="fill_parent"
                    android:layout_height="@dimen/edit_text_height"
                    android:textAllCaps="true"
                    android:inputType="textCapCharacters"
                    />
于 2019-06-18T05:02:13.440 回答
9

尝试使用以下任何一种代码都可以解决您的问题。

以编程方式:

editText.filters = editText.filters + InputFilter.AllCaps()

XML:

android:inputType="textCapCharacters" with Edittext
于 2019-06-10T09:24:41.663 回答
9

kotlin中,在 .kt 文件中进行更改:

edit_text.filters = edit_text.filters + InputFilter.AllCaps()

使用合成属性直接访问带有 id 的小部件。在 XML 中,为您的编辑文本添加几个标志:

<EditText
    android:id="@+id/edit_text_qr_code"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    ...other attributes...
    android:textAllCaps="true"
    android:inputType="textCapCharacters"
    />

这会将键盘更新为启用大写。

于 2018-07-29T14:07:56.483 回答
8
edittext.addTextChangedListener(new TextWatcher() {

    @Override
    public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {            

    }
        @Override
    public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
                    int arg3) {             
    }
    @Override
    public void afterTextChanged(Editable et) {
          String s=et.toString();
      if(!s.equals(s.toUpperCase()))
      {
         s=s.toUpperCase();
         edittext.setText(s);
      }
      editText.setSelection(editText.getText().length());
    }
});  
于 2014-10-12T02:07:30.360 回答
6

只需这样做:

// ****** Every first letter capital in word *********
<EditText
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:inputType="textCapWords"
    />

//***** if all letters are capital ************

    android:inputType="textCapCharacters"
于 2016-10-19T11:14:15.400 回答
6

试试这个代码,它会让你的输入变成大写

edittext.setFilters(new InputFilter[] {new InputFilter.AllCaps()});
于 2019-12-18T11:26:26.627 回答
6

简单的kotlin实现

fun EditText.onlyUppercase() {
    inputType = InputType.TYPE_CLASS_TEXT or InputType.TYPE_TEXT_FLAG_CAP_CHARACTERS
    filters = arrayOf(InputFilter.AllCaps())
}

PS它似乎filters最初总是空的

于 2018-11-17T19:10:29.137 回答
3

要获得所有资金,请在 XML 中使用以下内容:

<EditText
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textAllCaps="true"
    android:inputType="textCapCharacters"
/>
于 2018-07-10T10:25:28.083 回答
3

根据接受的答案,此答案的作用相同,但在 Kotlin 中。只是为了方便复制粘贴:·)

private fun EditText.autocapitalize() {
    val allCapsFilter = InputFilter.AllCaps()
    setFilters(getFilters() + allCapsFilter)
}
于 2017-08-16T16:52:23.373 回答
1

要在单击edittext时获取大写键盘,请在您的xml中使用此代码,

<EditText
    android:id="@+id/et"
    android:layout_width="250dp"
    android:layout_height="wrap_content"
    android:hint="Input your country"
    android:padding="10dp"
    android:inputType="textCapCharacters"
    />
于 2016-07-25T05:58:01.503 回答
1

我正在使用 Visual Studio 2015/Xamarin 为 Android 5.1 和 Android 6.0 构建我的应用程序(两者都安装了相同的 apk)。

当我android:inputType="textCapCharacters"在我的 axml 中指定时,AllCaps 键盘按预期出现在 Android 6.0 上,但不是 Android 5.1。我添加android:textAllCaps="true"到我的 axml 中,但在 Android 5.1 上仍然没有 AllCaps 键盘。我设置了一个过滤器EditText.SetFilters(new IInputFilter[] { new InputFilterAllCaps() });,当软键盘在 Android 5.1 上显示小写字符时,输入字段现在是 AllCaps。

编辑:我观察到并假设与操作系统相关的行为差异实际上是因为我在测试设备上使用了不同版本的 Google 键盘。 一旦我将设备更新到最新的 Google 键盘(在撰写本文时发布于 2016 年 7 月),“全大写”行为在各个操作系统中都是一致的。现在,所有设备在键盘上都显示小写字符,但输入是全部大写,因为SetFilters(new IInputFilter[] { new InputFilterAllCaps() });

于 2016-08-27T15:45:49.717 回答
1

Xamarin 相当于 ErlVolton 的回答:

editText.SetFilters(editText.GetFilters().Append(new InputFilterAllCaps()).ToArray());
于 2018-11-01T13:40:08.003 回答
0

2021:答案

如果您想获得EditTextfrom ,这是唯一的最新答案EditTextPreference

为了更改EditText值或属性,您需要setOnBindEditTextListener根据新的 AndroidX Kotlin 设置回调。

findPreference<EditTextPreference>("key")?.setOnBindEditTextListener {
    it.filters = arrayOf<InputFilter>(InputFilter.AllCaps())
}
于 2021-09-22T19:28:56.293 回答
0

提议的解决方案的 Java 1-liner 可以是:

editText.setFilters(Lists.asList(new InputFilter.AllCaps(), editText.getFilters())
    .toArray(new InputFilter[editText.getFilters().length + 1]));

注意它需要com.google.common.collect.Lists.

于 2019-05-31T00:59:51.917 回答
-2

简单地说,将以下代码添加到您的 xml 文件的 EditText 中。

android:digits="ABCDEFGHIJKLMNOPQRSTUVWXYZ"

如果您想同时允许大写文本和数字,请使用以下代码。

android:digits="ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"
于 2017-03-31T13:17:02.413 回答