在Android的EditText中,如何强制输入大写字母?

186
在我的Android应用中,我有不同的EditText,用户可以在其中输入信息。但我需要强制用户使用大写字母进行书写。您知道一个能实现这个功能的函数吗?
27个回答

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"
    />

这将启用键盘的大写锁定功能。

9
尝试使用以下任何一种代码可能会解决您的问题。
编程方式:
editText.filters = editText.filters + InputFilter.AllCaps()

XML :

android:inputType="textCapCharacters" with Edittext

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

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"

6

简单的 Kotlin 实现

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

PS,看起来filters最初总是为空


6

尝试这段代码,它会将输入转换为大写字母

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

3

基于被接受的答案,这个答案使用Kotlin做同样的事情。只是为了方便复制粘贴 :·)

private fun EditText.autocapitalize() {
    val allCapsFilter = InputFilter.AllCaps()
    setFilters(getFilters() + allCapsFilter)
}

1
filters += InputFilter.AllCaps() :D - crgarridos
哇,这甚至更好!谢谢@crgarridos! - Roc Boronat

3
要获取所有大写字母,请在您的 XML 中使用以下内容:
<EditText
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textAllCaps="true"
    android:inputType="textCapCharacters"
/>

2
你尝试过这个解决方案吗?当用户开始编辑EditText的内容时,这会导致应用程序崩溃。 - surhidamatya

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"
    />

1
我正在使用Visual Studio 2015 / Xamarin构建我的应用程序,为Android 5.1和Android 6.0(相同的apk安装在两者上)。
当我在axml中指定android:inputType =“textCapCharacters”时,AllCaps键盘在Android 6.0上出现了,但在Android 5.1上没有。 我在我的axml中添加了android:textAllCaps =“true” ,但在Android 5.1上仍然没有AllCaps键盘。 我使用 EditText.SetFilters(new IInputFilter[] { new InputFilterAllCaps() }); 设置过滤器,虽然在Android 5.1上软键盘显示小写字符,但输入字段现在是AllCaps。
编辑:我观察到的行为差异并认为与操作系统有关实际上是因为测试设备上的Google Keyboard版本不同。 一旦将设备更新到最新的Google Keyboard(截至本文撰写时发布于2016年7月),'All Caps'行为在所有操作系统上都是一致的。 现在,所有设备都在键盘上显示小写字符,但由于SetFilters(new IInputFilter[] { new InputFilterAllCaps() });,输入是All Caps。

1
嗨,托尼,看起来你创建了2个帐户:http://stackoverflow.com/users/6764633/tony-celia 和 http://stackoverflow.com/users/6771440/deeveedee。如果你想合并它们,请参见http://stackoverflow.com/help/merging-accounts。 - Matt
谢谢,马特。这个问题归结为初学者的错误和经验不足。直到你指出来我才想起我创建了另一个账户。幸运的是,账户合并功能很简单。这是一个很棒的论坛! - Tony

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接