在Android EditText中,如何强制写大写?

Nat*_*ha 131 android uppercase android-edittext

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

Erl*_*ton 325

Android实际上有一个内置的InputFilter就是为了这个!

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

要小心,setFilters 将重置所有其他属性这是通过XML设置(即maxLines,inputType,imeOptinos...).要防止这种情况,请将Filter(s)添加到现有的Filter.

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

  • 或者在Kotlin只是`editText.filters = editText.filters + InputFilter.AllCaps()` (14认同)
  • 更好的是:`editText.filters += InputFilter.AllCaps()` Kotlin 太棒了!&lt;3 (13认同)
  • 好的,伙计们是对的,我更新了我的答案.感谢您帮助改进这一点!! (4认同)
  • 为了避免覆盖你在xml上设置的过滤器(例如``maxLength`),尝试将`InputFilter.AllCaps()`附加到`editText.getFilters`数组.请参见http://stackoverflow.com/a/18934659/3890983 (4认同)
  • 是! 这是最好的答案!不过,代码应为`edittext.setFilters(new InputFilter [] {new InputFilter.AllCaps()});`。 (3认同)
  • 无论如何在xml中这样做? (3认同)

Aoy*_*ami 111

如果您希望强制用户在EditText中默认使用大写字母进行书写,则只需添加即可android:inputType="textCapCharacters".(用户仍然可以手动更改为小写.)

  • 什么都没有阻止用户按'shift'并写一个小写字母. (36认同)

Gab*_*han 21

设置input typeTYPE_CLASS_TEXT| TYPE_TEXT_FLAG_CAP_CHARACTERS.本keyboard应履行这一点.

  • 我真的不知道为什么这个答案有这么多人点赞。该解决方案并不能避免用户禁用大写锁定...... (3认同)

Har*_*hid 17

你可以用两种方式.

第一种方式:

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

  • 对于第一个选项textCapSentences大写句子,你需要textCapCharacters. (6认同)
  • 您的解决方案不起作用,因为它以相反的顺序设置字符串. (2认同)

Abh*_*hek 13

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

  • `android:textAllCaps="true"` 只是 TextView 的一个属性 (/sf/answers/2016244471/)。改用`android:inputType="textCapCharacters"`。 (2认同)

ant*_*ycr 10

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

以下代码应该有所帮助:

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

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


Pab*_*bel 10

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

  • AoyamaNanami写了完全相同的答案.请关注更多当前的问题,这个问题是从2013年开始的.:) (8认同)
  • 请注意,用户可以移动并输入较低的字符 (2认同)

小智 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"
                    />
Run Code Online (Sandbox Code Playgroud)


小智 8

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

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

完成!

  • 更好的是:`<your_edit_text> .filters + = InputFilter.AllCaps()` (7认同)
  • 您可以使用属性访问语法编写它:`<your_edit_text> .filters = <your_edit_text> .filters + InputFilter.AllCaps()` (2认同)

小智 8

使用输入过滤器

editText = (EditText) findViewById(R.id.enteredText);
editText.setFilters(new InputFilter[]{new InputFilter.AllCaps()});
Run Code Online (Sandbox Code Playgroud)


Vla*_*lad 7

简单的kotlin实现

fun EditText.onlyUppercase() {
    inputType = InputType.TYPE_CLASS_TEXT or InputType.TYPE_TEXT_FLAG_CAP_CHARACTERS
    filters = arrayOf(InputFilter.AllCaps())
}
Run Code Online (Sandbox Code Playgroud)

filtersPS最初似乎总是空的


小智 7

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

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


小智 5

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


Pra*_*har 5

这样做:

// ****** 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"
Run Code Online (Sandbox Code Playgroud)


vis*_*nny 5

kotlin中的.kt文件中进行更改:

edit_text.filters = edit_text.filters + InputFilter.AllCaps()
Run Code Online (Sandbox Code Playgroud)

使用合成属性直接访问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"
    />
Run Code Online (Sandbox Code Playgroud)

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


Niv*_*edh 5

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

以编程方式:

editText.filters = editText.filters + InputFilter.AllCaps()
Run Code Online (Sandbox Code Playgroud)

XML:

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