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

在我的 Android 应用程序中,我有不同的 EditText,用户可以在其中输入信息。但是我需要强制用户使用大写字母。 你知道这样做的函数吗?

170568 次浏览

不可能仅通过 XML 强制启动盖帽锁。第三方图书馆也无济于事。你可以在接收端对文本执行 toUpper()操作,但是在键盘端无法阻止它

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

爪哇咖啡

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

科特林

android:inputType="textCapCharacters"

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

下面的代码应该有所帮助:

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

这是用户友好的,因为用户不需要知道您需要大写的字符串。 希望这个能帮上忙。

你可以用两种方式。

第一种方法:

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

第二种方法:

当用户输入的数字,你必须使用文本观察和改变小到大写字母。

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

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

Android 实际上有一个 内置的输入过滤器只是为了这个

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

注意,setFilters 将重置所有其他属性是通过 XML 设置的(即 maxLinesinputTypeimeOptinos...)。为了防止这种情况,请将 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);
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());
}
});

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

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

要在单击 编辑文本时获取 大写键盘大写键盘,请在 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"
/>

我正在使用 Visual Studio 2015/Xamarin 为 Android 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() });设置了一个过滤器,当软键盘显示 Android 5.1上的小写字符时,输入字段现在是 AllCaps。

编辑: 我观察到的行为差异,并认为是与操作系统有关,实际上是因为 我在测试设备上有不同版本的谷歌键盘一旦我更新设备到最新的谷歌键盘(发布于2016年7月,截至本文撰写) ,“所有大写”的行为是一致的,在整个操作系统。现在,所有的设备都在键盘上显示小写字符,但是由于 SetFilters(new IInputFilter[] { new InputFilterAllCaps() });的原因,输入是 All Caps

照我说的做:

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

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

android:digits="ABCDEFGHIJKLMNOPQRSTUVWXYZ"

如果您希望同时允许大写文本和数字,请使用下面的代码。

android:digits="ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"

基于公认的答案,这个答案也是一样的,只不过是在 Kotlin

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

甚至更好... 科特林中的 一个班轮..。

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

成交!

使用输入过滤器

editText = (EditText) findViewById(R.id.enteredText);
editText.setFilters(new InputFilter[]{new InputFilter.AllCaps()});

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

<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAllCaps="true"
android:inputType="textCapCharacters"
/>

Kotlin中,In.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"
/>

这将更新键盘大写启用。

Xamarin 相当于 ErlVolton 的回答:

editText.SetFilters(editText.GetFilters().Append(new InputFilterAllCaps()).ToArray());

很简单的 Kotlin 领悟

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

PS 看起来 filters最初总是空的

拟议解决方案的 Java1-liner 可以是:

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

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

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

编程方式:

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

XML:

android:inputType="textCapCharacters" with Edittext

对我来说,通过增加 机器人: textAllCaps = “ true”InputType = “ textCapProperties”,它起作用了

<android.support.design.widget.TextInputEditText
android:layout_width="fill_parent"
android:layout_height="@dimen/edit_text_height"
android:textAllCaps="true"
android:inputType="textCapCharacters"
/>

尝试这个代码,它会使你的输入成为大写

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

2021: 答案

如果你想从 EditTextPreference中得到 EditText,这是唯一的最新答案。

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

findPreference<EditTextPreference>("key")?.setOnBindEditTextListener {
it.filters = arrayOf<InputFilter>(InputFilter.AllCaps())
}

可以在 XML 文件中使用 android:inputType="textCapCharacters|textAutoComplete"

在使用 edit Text 的 XML 方面,下面的代码将强制输入用户文本使其全部为大写,除了 XML 以外没有 Java 代码:

    android:inputType="textAutoCorrect|none|numberSigned|textMultiLine|textNoSuggestions|number|datetime|textWebEmailAddress|textPersonName|textCapSentences|textPassword|textAutoComplete|textImeMultiLine|numberDecimal"

毫无疑问,这些都可以使文本输入区域全部以大写形式出现。 如果您不想使用 AllCaps,那么就不要在上面的 XML 代码中编写“ 编号”。