zoukankan      html  css  js  c++  java
  • Android EditText 文本长度限制(按照一个汉字占俩长度 类似字节)

    Android EditText 文本长度限制有很简单的一种限制方式:在xml布局文件中对EditText添加 Android:maxLength="N" 

    但是这种简单的方式可能有时候不能满足某些比较较真的需求,这个时候就需要用别的的方式去限制长度了。

    也就是通过InputFilter来实现:

    private class NameLengthFilter implements InputFilter {
            int MAX_EN;
            String regEx = "[\u4e00-\u9fa5]";
    
            public NameLengthFilter(int mAX_EN) {
                super();
                MAX_EN = mAX_EN;
            }
    
            @Override
            public CharSequence filter(CharSequence source, int start, int end,
                                       Spanned dest, int dstart, int dend) {
                int destCount = dest.toString().length()
                        + getChineseCount(dest.toString());
                int sourceCount = source.toString().length()
                        + getChineseCount(source.toString());
                if (destCount + sourceCount > MAX_EN) {
                    int surplusCount = MAX_EN - destCount;
                    String result = "";
                    int index = 0;
                    while (surplusCount > 0) {
                        char c = source.charAt(index);
                        if (isChinest(c + "")) {
                            if (sourceCount >= 2) {
                                result += c;
                            }
                            surplusCount = surplusCount - 2;
                        } else {
                            result += c;
                            surplusCount = surplusCount - 1;
                        }
                        index++;
                    }
                    return result;
                } else {
                    return source;
                }
            }
    
            private int getChineseCount(String str) {
                int count = 0;
                Pattern p = Pattern.compile(regEx);
                Matcher m = p.matcher(str);
                while (m.find()) {
                    for (int i = 0; i <= m.groupCount(); i++) {
                        count = count + 1;
                    }
                }
                return count;
            }
    
            private boolean isChinest(String source) {
                return Pattern.matches(regEx, source);
            }
        }

    以上是自定义的Filter,给需要的EditText设置就OK了:

    ed_nane.setFilters(filters);

    可能某些代码比较low,但是可以用。

  • 相关阅读:
    如何完全卸载oracle和删除oracle在注册表中的注册信息
    win10 管理工具中添加 oracle 10g驱动
    failed to install tomcat6 service ,check your setting and permissions
    ORA-28000: the account is locked-的解决办法
    Intellij Idea乱码解决方案
    过三关 Java冒泡排序选择排序插入排序小练习
    Java坦克大战(四)
    Java坦克大战(三)
    Java坦克大战(二)
    Java坦克大战(一)
  • 原文地址:https://www.cnblogs.com/mauiie/p/5557199.html
Copyright © 2011-2022 走看看