22

こんにちは、アンドロイドの EditText のキーパッドに数字と文字のみを表示したいのですが、属性を追加しようとしましたが、うまくいきandroid:inputType = text|numberませんでした。

他のより良い提案があれば助けてください。前もって感謝します。

4

9 に答える 9

36

そのためにフィルターを使用します。ここでは、フィルターのコードを追加しています。

  EditText etName = (EditText)findViewById(R.id.etName);
  InputFilter filter = new InputFilter() { 
        @Override
        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; 
        }
  };
  etName.setFilters(new InputFilter[]{filter}); 
于 2011-09-07T14:26:48.333 に答える
25

digits パラメータを editText に追加してみてください:

android:digits="abcde.....012345789"
于 2011-09-07T14:27:03.903 に答える
3

私のために働いたこの方法を試してみてください:

public static InputFilter[] getFilter(String blockChars) {
   return new InputFilter[]{(source, start, end, dest, dstart, dend) -> {
        for (int i = start; i < end; i++) {
            if (source != null && blockChars.contains("" + source.charAt(i))) {
                return source.subSequence(start, i);
            }
        }
        return null;
    }};

編集テキストにこの行を追加します

edittext.setFilters(getFilter("@~"));
于 2020-02-17T07:34:59.687 に答える
0
  //大兄弟,这么做就可以了。 
  InputFilter filter = new InputFilter() {
        @Override
        public CharSequence filter(CharSequence source, int start, int end,
                                   Spanned dest, int dstart, int dend) {
            for (int i = start; i < end; i++) {
                if (isChineseChar(source.charAt(i))) {
                    return "";
                }
            }
            return null;
        }
    };
    etName.setFilters(new InputFilter[]{filter});

//一条简单的规则。
private static boolean isChineseChar(char c) {
    Character.UnicodeBlock ub = Character.UnicodeBlock.of(c);
    return ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS;
}
于 2016-08-18T10:28:16.603 に答える