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

在我的Android应用程序中,我有不同的EditText用户可以input信息。 但是我需要强制用户用大写字母来写。 你知道一个function吗?

Android实际上只有一个内置的InputFilter !

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

要小心, setFilters 将重置通过XML 设置的所有其他属性 (fe maxLinesinputTypeimeOptinos …)。 为了防止这种情况,请将您的filter添加到已经存在的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); 

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

input type设置为TYPE_CLASS_TEXT| TYPE_TEXT_FLAG_CAP_CHARACTERS TYPE_CLASS_TEXT| TYPE_TEXT_FLAG_CAP_CHARACTERSkeyboard应该尊重这一点。

而不是担心处理键盘,为什么不接受任何input,小写或大写,并将string转换为大写?

以下代码应该有所帮助:

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

这是用户友好的,因为用户不需要知道你需要大写的string。 希望这可以帮助。

你应该把android:inputType="textCapCharacters"与EditText放在xml文件中。

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

你可以用两种方法。

第一条路:

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

第二种方式:

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

 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.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()); } }); 
 It is more easy, Just do this, // ****** Every first letter capital in word ********* <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:inputType="textCapWords" /> //***** if all letteres are capital ************ android:inputType="textCapCharacters" 

当点击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" /> 

甚至更好… Kotlin的 一个class轮

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

完成!

基于接受的答案,这个答案也是一样的,但在Kotlin。 只是为了缓解副本:·)

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

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

当我在我的axml中指定android:inputType="textCapCharacters"时,AllCaps键盘在Android 6.0上按预期显示,但不是Android 5.1。 我将android:textAllCaps="true"到了我的axml,而Android 5.1上仍然没有AllCaps键盘。 我使用EditText.SetFilters(new IInputFilter[] { new InputFilterAllCaps() });设置了一个filterEditText.SetFilters(new IInputFilter[] { new InputFilterAllCaps() }); 而软键盘在Android 5.1上显示小写字母,input字段现在是AllCaps。

编辑:我观察到并假定与操作系统相关的行为差异实际上是因为我在testing设备上有不同版本的Google键盘。 一旦我将设备更新到最新的Google键盘(截至撰写本文时为止,2016年7月发布),“所有上限”的行为在各个操作系统中都是一致的。 现在,所有的设备都在键盘上显示小写字母,但是由于SetFilters(new IInputFilter[] { new InputFilterAllCaps() });的input是All Caps SetFilters(new IInputFilter[] { new InputFilterAllCaps() });

简单地说,将下面的代码添加到您的XML文件的EditText。

 android:digits="ABCDEFGHIJKLMNOPQRSTUVWXYZ" 

如果你想让大写的文本和数字,然后使用下面的代码。

 android:digits="ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"