限制EditText必须输入中文的方法

来源:互联网 发布:域名未授权怎么办 编辑:程序博客网 时间:2024/05/29 05:05
给EditText做限制时,我们想要输入的字符串必须都是中文,不出现任何其他字符,下面的类可以很好的实现这个要求。
package com.kale.buttonselector;import android.content.Context;import android.text.InputFilter;import android.text.Spanned;import android.widget.EditText;/** * @author:Jack Tony * @description : 对输入字符进行处理 * @date :2015年2月21日 */public class InputLenLimit {        public static void lengthFilter(final Context context, final EditText editText) {        InputFilter[] filters = new InputFilter[1];        filters[0] = new InputFilter.LengthFilter(INPUT_LIMIT_LEN) {            public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {                boolean isChinese = checkNameChese(source.toString());                // 如果不是中文,或者长度过长就返回“”                if (!isChinese || dest.toString().length() >= INPUT_LIMIT_LEN) {                    return "";                }                return source;            }        };        // Sets the list of input filters that will be used if the buffer is Editable. Has no effect otherwise.        editText.setFilters(filters);    }    /**     * 检测String是否全是中文     *      * @param name     */    public static boolean checkNameChese(String name) {        boolean res = true;        char[] cTemp = name.toCharArray();        for (int i = 0; i < name.length(); i++) {            if (!isChinese(cTemp[i])) {                res = false;                break;            }        }        return res;    }    /**     * 判定输入汉字是否是中文     *      * @param c     */    public static boolean isChinese(char c) {        for (char param : chineseParam) {            if (param == c) {                return false;            }        }        Character.UnicodeBlock ub = Character.UnicodeBlock.of(c);        if (ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS || ub == Character.UnicodeBlock.CJK_COMPATIBILITY_IDEOGRAPHS                || ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A || ub == Character.UnicodeBlock.GENERAL_PUNCTUATION                || ub == Character.UnicodeBlock.CJK_SYMBOLS_AND_PUNCTUATION || ub == Character.UnicodeBlock.HALFWIDTH_AND_FULLWIDTH_FORMS) {            return true;        }        return false;    }    public static final int INPUT_LIMIT_LEN = 20;    private static char[] chineseParam = new char[] { '」', ',', '。', '?', '…', ':', '~', '【', '#', '、', '%', '*', '&', '$', '(', '‘', '’',            '“', '”', '『', '〔', '{', '【', '¥', '£', '‖', '〖', '《', '「', '》', '〗', '】', '}', '〕', '』', '”', ')', '!', ';', '—' };}