2011-05-21 104 views

回答

50

在XML,把這個:

android:digits="abcdefghijklmnopqrstuvwxyz1234567890 " 
+0

謝謝,這就是我正在尋找! – 2011-05-21 16:28:50

+0

不錯的答案。很感謝 – 2012-01-31 09:49:52

+1

哇,Android讓它變得如此簡單。 iOS需要1000倍的努力來實現相同的功能。 – Moe 2012-04-24 15:15:32

-9

這應該工作:

textView.setInputType(InputType.TYPE_CLASS_NUMBER); 
+0

這隻允許數字 – richy 2012-05-15 02:59:21

15

這裏是一個更好的解決方案......... 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}); 
+0

允許大寫字母更好的解決方案。 – 2013-10-17 10:16:50

+0

該解決方案適用於輸入單個字符的簡單情況,但不能正確處理複製和粘貼,或者在EditText上設置了其他'InputFilters'。我發佈了一個更完整的解決方案。 – 2015-12-22 15:40:12

5

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); 
+0

來簡化setFilters我會做的: editText.setFilters(new InputFilter [] {new CurrencyFormatInputFilter()}); – Rocel 2016-01-27 11:37:14

+1

@Rocel請仔細閱讀我的解釋:「您必須確保不要覆蓋EditText上設置的其他InputFilters;這些可以設置爲XML,例如'android:maxLength'._」您的建議將覆蓋任何其他'InputFilter',就像@ AchJ的解決方案,它不是*我們想在這裏做的。 – 2016-01-27 14:01:27

+1

好吧,我讀錯了,然後,我的不好;) – Rocel 2016-01-27 15:47:33

相關問題