如何将输入内容限制为Android中的EditText

时间:2016-10-21 02:25:28

标签: android android-edittext android-input-filter

我想限制只包含chinease字符,字母(a~z,A~Z)和数字(0~9)的EditText输入内容,它不能输入任何空格char或表情符号字符或符号

我尝试将一个InputFilter添加到EditText,但我不是真的表情符号unicode,结果是一些chinease字符也会被过滤。

还有其他解决方案吗?

我的EmojiFilter:

public class EmojiFilter implements InputFilter {

@Override
public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart,
                           int dend) {
    if (filterSet.contains(source.toString())) {
        return "";
    }
    return source;
}

private static Set<String> filterSet = null;

private static void addUnicodeRangeToSet(Set<String> set, int start, int end) {
    if (set == null) {
        return;
    }
    if (start > end) {
        return;
    }

    for (int i = start; i <= end; i++) {
        filterSet.add(new String(new int[] {
                i
        }, 0, 1));
    }
}

static {
    filterSet = new HashSet<String>();

    // See http://apps.timwhitlock.info/emoji/tables/unicode

    // 1F601 - 1F64F
    addUnicodeRangeToSet(filterSet, 0x1F601, 0X1F64F);

    // 2702 - 27B0
    addUnicodeRangeToSet(filterSet, 0x2702, 0X27B0);

    // 1F680 - 1F6C0
    addUnicodeRangeToSet(filterSet, 0X1F680, 0X1F6C0);

    // 24C2 - 1F251
    addUnicodeRangeToSet(filterSet, 0X24C2, 0X1F251);

    // 1F600 - 1F636
    addUnicodeRangeToSet(filterSet, 0X1F600, 0X1F636);

    // 1F681 - 1F6C5
    addUnicodeRangeToSet(filterSet, 0X1F681, 0X1F6C5);

    // 1F30D - 1F567
    addUnicodeRangeToSet(filterSet, 0X1F30D, 0X1F567);

}

public EmojiFilter() {
    super();
}

}

0 个答案:

没有答案