在我的Android应用中,我有不同的
EditText
,用户可以在其中输入信息。但我需要强制用户使用大写字母进行书写。您知道一个能实现这个功能的函数吗?EditText
,用户可以在其中输入信息。但我需要强制用户使用大写字母进行书写。您知道一个能实现这个功能的函数吗?实际上,Android 内置了一个InputFilter 专门用于这个功能!
edittext.setFilters(new InputFilter[] {new InputFilter.AllCaps()});
请注意,setFilters
方法将重置通过 XML 设置的所有其他属性(例如 maxLines
、inputType
、imeOptions
等)。为了防止这种情况,应该将您的筛选器添加到已经存在的筛选器中。
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);
android:inputType="textCapCharacters"
。无法通过 XML 强制打开大写锁定键,第三方库也不能帮忙。你可以在接收端对文本使用 toUpper()
,但在键盘端没有办法防止它。
你可以使用 XML 来设置键盘为大写锁定状态。
Java
你可以将 input_type
设置为 TYPE_CLASS_TEXT| TYPE_TEXT_FLAG_CAP_CHARACTERS
。键盘应该会遵守这个设定。
Kotlin
android:inputType="textCapCharacters"
你可以使用两种方法。
第一种方法:
在你的EditText上设置android:inputType="textCapSentences"
。
第二种方法:
当用户输入数字时,你需要使用TextWatcher并将小写字母更改为大写字母。
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 = (EditText) findViewById(R.id.enteredText);
editText.setFilters(new InputFilter[]{new InputFilter.AllCaps()});
更好的是...在Kotlin中用一行代码...
// gets your previous attributes in XML, plus adds AllCaps filter
<your_edit_text>.setFilters(<your_edit_text>.getFilters() + InputFilter.AllCaps())
完成!
<your_edit_text>.filters = <your_edit_text>.filters + InputFilter.AllCaps()
(意思是将 <your_edit_text>
的过滤器设置为当前过滤器加上 InputFilter.AllCaps()
) - Makotosan<your_edit_text>.filters += InputFilter.AllCaps()
。
(说明:这段代码用于将用户输入的文本全部转换为大写字母) - Makotosanandroid:textAllCaps="true"
只是 TextView 的一个属性(https://dev59.com/kOo6XIcBkEYKwwoYGwUw#28803492)。请使用 android:inputType="textCapCharacters"
代替。 - woodii您应该在xml文件中的EditText中加入android:inputType="textCapCharacters"
。
不必担心如何处理键盘输入,为什么不接受所有的小写或大写输入并将字符串转换为大写呢?
以下代码应该有所帮助:
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.setFilters(new InputFilter[] {new InputFilter.AllCaps()});
。 - ArthurmaxLength
),请尝试将InputFilter.AllCaps()
添加到editText.getFilters
数组中。请参见 https://dev59.com/0GjWa4cB1Zd3GeqPoC1f#18934659。 - tropicalfisheditText.filters = editText.filters + InputFilter.AllCaps()
添加到EditText中即可将输入的文本全部转换为大写字母,不改变原意。 - Ilia KurtoveditText.filters += InputFilter.AllCaps()
Kotlin太棒了!<3 - Milack27