AndroidのInputFillter之按字符过滤长度,一个中文当两个字符

/**
 * 以Byte数的方式来实现的LengthFilter
 * @author bvin
 */
public class OneByteInputFilter implements InputFilter{

    private final int mMax;
    
    public OneByteInputFilter(int mMax) {
        super();
        this.mMax = mMax;
    }

    @Override
    public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart,
                    int dend) {
        //int remainLength = dest.length()-(dend-dstart);
        
        CharSequence placeStart = dest.subSequence(0, dstart);
        CharSequence placeEnd = dest.subSequence(dend, dest.length());
        
        int placeStartLength = Util.computeLenthByByte(placeStart.toString());
        int placeEndLength = Util.computeLenthByByte(placeEnd.toString());
        
        int canReplaceSize = mMax-placeStartLength-placeEndLength;
        
        if (canReplaceSize>0) {
            CharSequence sourceSpan = source.subSequence(start, end);
            int sourceSpanLength = Util.computeLenthByByte(sourceSpan.toString());
            if (sourceSpanLength>=canReplaceSize) {//替换内容长度大于可容纳长度
                String result = fixSplit(sourceSpan.toString(), canReplaceSize, false);
                if (!TextUtils.isEmpty(result)) {
                    return result;
                }else {
                    return "";
                }
                
            }else {
                return null;
            }
            
        }else {
            return "";
        }
      
    }

    private static String fixSplit(String s,int sum,boolean debug){
        int counter = 0;
        String fixString = null;
        for (int i = 0; i < s.length(); i++) {
            if (counter>=sum) {
                break;
            }
            int length = (s.charAt(i)+"").getBytes().length;
            if(length>1){
                counter += 2;
                if (counter<=sum) {
                    fixString = s.substring(0, i+1);
                }
            } else if (length==1){
                if (counter<=sum) {
                    fixString = s.substring(0, i+1);
                }
                ++counter;
            }else {//小于1
                continue;
            }
            
            /*if (counter>=sum) {
                System.out.println("break;"+counter);
                break;
            }else {
                fixString = s.substring(0, i+1);
            }*/
        }
        return fixString;
    }
}

 

posted @ 2015-06-11 10:01  bvin  阅读(553)  评论(0编辑  收藏  举报