我在我的应用程序中有一个TextView,我希望用户只能输入字母数字字符。这怎么办?谢谢!如何限制TextView在Android中仅允许字母数字字符
回答
在XML,把这个:
android:digits="abcdefghijklmnopqrstuvwxyz1234567890 "
这里是一个更好的解决方案......... https://groups.google.com/forum/?fromgroups=#!topic/android-developers/hS9Xj3zFwZA
InputFilter filter = new InputFilter() {
public CharSequence filter(CharSequence source, int start, int end,
Spanned dest, int dstart, int dend) {
for (int i = start; i < end; i++) {
if (!Character.isLetterOrDigit(source.charAt(i))) {
return "";
}
}
return null;
}
};
edit.setFilters(new InputFilter[]{filter});
允许大写字母更好的解决方案。 – 2013-10-17 10:16:50
该解决方案适用于输入单个字符的简单情况,但不能正确处理复制和粘贴,或者在EditText上设置了其他'InputFilters'。我发布了一个更完整的解决方案。 – 2015-12-22 15:40:12
InputFilter
解决方案运行良好,并且可以完全控制筛选出更细粒度的输入android:digits
。如果所有字符均有效,则filter()
方法应返回null
,或者如果某些字符无效,则应返回仅有效字符的CharSequence
。如果复制并粘贴多个字符,并且其中一些字符无效,则只应保留有效字符(如果有任何字符无效,@AchJ的解决方案将拒绝整个粘贴)。
public static class AlphaNumericInputFilter implements InputFilter {
public CharSequence filter(CharSequence source, int start, int end,
Spanned dest, int dstart, int dend) {
// Only keep characters that are alphanumeric
StringBuilder builder = new StringBuilder();
for (int i = start; i < end; i++) {
char c = source.charAt(i);
if (Character.isLetterOrDigit(c)) {
builder.append(c);
}
}
// If all characters are valid, return null, otherwise only return the filtered characters
boolean allCharactersValid = (builder.length() == end - start);
return allCharactersValid ? null : builder.toString();
}
}
此外,设置你的InputFilter
时,你必须确保不写上您的EditText
其他InputFilters
集;这些可以用XML设置,如android:maxLength
。您还必须考虑设置了InputFilters
的订单。当与长度过滤器一起使用时,应在长度过滤器之前插入自定义过滤器,这样粘贴的文本在长度过滤器之前应用自定义过滤器(@ AchJ的解决方案将覆盖所有其他InputFilters
并仅应用自定义过滤器)。
// Apply the filters to control the input (alphanumeric)
ArrayList<InputFilter> curInputFilters = new ArrayList<InputFilter>(Arrays.asList(editText.getFilters()));
curInputFilters.add(0, new AlphaNumericInputFilter());
InputFilter[] newInputFilters = curInputFilters.toArray(new InputFilter[curInputFilters.size()]);
editText.setFilters(newInputFilters);
来简化setFilters我会做的: editText.setFilters(new InputFilter [] {new CurrencyFormatInputFilter()}); – Rocel 2016-01-27 11:37:14
@Rocel请仔细阅读我的解释:“您必须确保不要覆盖EditText上设置的其他InputFilters;这些可以设置为XML,例如'android:maxLength'._”您的建议将覆盖任何其他'InputFilter',就像@ AchJ的解决方案,它不是*我们想在这里做的。 – 2016-01-27 14:01:27
好吧,我读错了,然后,我的不好;) – Rocel 2016-01-27 15:47:33
- 1. 仅在字母数字字符后才允许特殊字符?
- 2. 只允许字母数字字符
- 3. 只允许7个字母数字字符,但无限空间
- 4. 只允许在UITextView中的字母数字字符
- 5. 只允许字母,数字,变音符号,+, - ,并在字符串
- 6. Android:允许用户在EditText中仅添加字母和特殊字符
- 7. 允许一些特殊字符和字母数字字符
- 8. 仅限数字字段允许使用符号吗?
- 9. 如何限制字符串不允许使用数字或特殊字符?
- 10. 如何过滤字符串,以便只允许字母数字字符通过
- 11. 如何在TInputQueryWizardPage编辑框中只允许输入字母数字字符?
- 12. 只允许字母和特殊字符
- 13. 如何在datagridview单元格中允许大写字母,数字?
- 14. 如何使用preg_match仅允许包含字母和数字字符的字符串?
- 15. 允许并限制一些HTML字符
- 16. 仅允许在XSLT中使用字符和数字
- 17. 如何在Crystal Reports中仅显示字母数字字符?
- 18. 只允许数字字符
- 19. ASP.NET身份:仅允许字母数字用户名实现
- 20. 如何允许Android数字键盘中的特定字符?
- 21. 允许我的字符串中的数字,字母和任何符号
- 22. Modrewrite允许数字,字母,下划线
- 23. 只允许字母数字值
- 24. TextBox限制字符串中允许的字符数(并确保它们全部是大写字母)
- 25. 大写字母不允许在android res
- 26. 只允许在字母数字和字符之间使用一个字符串
- 27. Zend_Validate_Regex - 只允许字母,数字和字符-_
- 28. jQuery只允许数字,字母和连字符
- 29. 正则表达式属性,只允许字母数字字符
- 30. 只允许字母,数字,下划线或连字符django
谢谢,这就是我正在寻找! – 2011-05-21 16:28:50
不错的答案。很感谢 – 2012-01-31 09:49:52
哇,Android让它变得如此简单。 iOS需要1000倍的努力来实现相同的功能。 – Moe 2012-04-24 15:15:32