我在我的應用程序中有一個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. 只允許7個字母數字字符,但無限空間
- 3. 只允許在UITextView中的字母數字字符
- 4. Android:允許用戶在EditText中僅添加字母和特殊字符
- 5. 只允許字母,數字,變音符號,+, - ,並在字符串
- 6. 允許一些特殊字符和字母數字字符
- 7. 如何使用preg_match僅允許包含字母和數字字符的字符串?
- 8. 如何在datagridview單元格中允許大寫字母,數字?
- 9. 允許並限制一些HTML字符
- 10. 僅允許在XSLT中使用字符和數字
- 11. 只允許數字字符
- 12. 大寫字母不允許在android res
- 13. Modrewrite允許數字,字母,下劃線
- 14. TextBox限制字符串中允許的字符數(並確保它們全部是大寫字母)
- 15. Zend_Validate_Regex - 只允許字母,數字和字符-_
- 16. 允許字母,數字和特定字符
- 17. 如何限制字符串中的字母數量
- 18. 限制字符顯示在TextView中
- 19. 正則表達式強制字母數字,但允許撇號和連字符?
- 20. Membership.generatepassword的字母數字字符僅
- 21. 文本字段應該只允許字母數字,不僅包括字母和數字?
- 22. 如何編寫JavaScript正則表達式以僅允許字母和數字?
- 23. 如何僅允許按鍵上的字母數字和下劃線
- 24. 不允許在Swift中使用字母字符3
- 25. 僅將inputText值限制爲字母字符
- 26. 如何只允許Python中的字符串中的數字,字母和某些字符?
- 27. 在android textview中是否有任何字符限制?
- 28. 只允許英文字母/數字/數字和一些特殊字符
- 29. 如何僅允許使用ng-pattern-restrict的字母數字作爲第一個字符?
- 30. 如何只允許輸入字母?
謝謝,這就是我正在尋找! – 2011-05-21 16:28:50
不錯的答案。很感謝 – 2012-01-31 09:49:52
哇,Android讓它變得如此簡單。 iOS需要1000倍的努力來實現相同的功能。 – Moe 2012-04-24 15:15:32