在我的 Android 应用程序中,我有不同EditText
的用户可以输入信息的位置。但我需要强制用户用大写字母书写。你知道这样做的功能吗?
24 回答
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);
如果你想强制用户在 EditText 中默认使用大写字母,你只需要添加android:inputType="textCapCharacters"
. (用户仍然可以手动更改为小写。)
仅通过 XML 强制大写锁定是不可能的。第三方库也无济于事。您可以toUpper()
在接收端对文本执行 a 操作,但无法在键盘端阻止它
您可以使用 XML 将键盘设置为大写锁定。
爪哇
您可以将 设置input_type
为 TYPE_CLASS_TEXT| TYPE_TEXT_FLAG_CAP_CHARACTERS
。keyboard
应该尊重这一点。
科特林
android:inputType="textCapCharacters"
您可以使用两种方式。
第一种方式:
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
}
}
});
您可以将该android:textAllCaps="true"
属性添加到 EditText 中的 xml 文件中。这将强制软输入键盘以全部大写模式出现。您输入的值将以大写形式显示。但是,这并不能确保用户只能输入UpperCase
字母。如果他们愿意,他们仍然可以回退到小写字母。如果要确保输出Edittext
全部大写,则必须使用类的toUpperCase()
方法手动转换输入字符串String
。
使用输入过滤器
editText = (EditText) findViewById(R.id.enteredText);
editText.setFilters(new InputFilter[]{new InputFilter.AllCaps()});
您应该将android:inputType="textCapCharacters"
Edittext 放在 xml 文件中。
更好... Kotlin中的一个班轮...
// gets your previous attributes in XML, plus adds AllCaps filter
<your_edit_text>.setFilters(<your_edit_text>.getFilters() + InputFilter.AllCaps())
完毕!
与其担心处理键盘,为什么不接受任何输入,小写或大写并将字符串转换为大写?
以下代码应该会有所帮助:
EditText edit = (EditText)findViewById(R.id.myEditText);
String input;
....
input = edit.getText();
input = input.toUpperCase(); //converts the string to uppercase
这是用户友好的,因为用户不必知道您需要大写字符串。希望这可以帮助。
对我来说,它通过添加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"
/>
尝试使用以下任何一种代码都可以解决您的问题。
以编程方式:
editText.filters = editText.filters + InputFilter.AllCaps()
XML:
android:inputType="textCapCharacters" with Edittext
在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"
/>
这会将键盘更新为启用大写。
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());
}
});
只需这样做:
// ****** 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"
试试这个代码,它会让你的输入变成大写
edittext.setFilters(new InputFilter[] {new InputFilter.AllCaps()});
简单的kotlin实现
fun EditText.onlyUppercase() {
inputType = InputType.TYPE_CLASS_TEXT or InputType.TYPE_TEXT_FLAG_CAP_CHARACTERS
filters = arrayOf(InputFilter.AllCaps())
}
PS它似乎filters
最初总是空的
要获得所有资金,请在 XML 中使用以下内容:
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAllCaps="true"
android:inputType="textCapCharacters"
/>
根据接受的答案,此答案的作用相同,但在 Kotlin 中。只是为了方便复制粘贴:·)
private fun EditText.autocapitalize() {
val allCapsFilter = InputFilter.AllCaps()
setFilters(getFilters() + allCapsFilter)
}
要在单击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"
/>
我正在使用 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() });
Xamarin 相当于 ErlVolton 的回答:
editText.SetFilters(editText.GetFilters().Append(new InputFilterAllCaps()).ToArray());
2021:答案
如果您想获得EditText
from ,这是唯一的最新答案EditTextPreference
。
为了更改EditText
值或属性,您需要setOnBindEditTextListener
根据新的 AndroidX Kotlin 设置回调。
findPreference<EditTextPreference>("key")?.setOnBindEditTextListener {
it.filters = arrayOf<InputFilter>(InputFilter.AllCaps())
}
提议的解决方案的 Java 1-liner 可以是:
editText.setFilters(Lists.asList(new InputFilter.AllCaps(), editText.getFilters())
.toArray(new InputFilter[editText.getFilters().length + 1]));
注意它需要com.google.common.collect.Lists
.
简单地说,将以下代码添加到您的 xml 文件的 EditText 中。
android:digits="ABCDEFGHIJKLMNOPQRSTUVWXYZ"
如果您想同时允许大写文本和数字,请使用以下代码。
android:digits="ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"