当前位置:   article > 正文

EditText 限制字数几种方法_edittext限制字数

edittext限制字数

这是2015年的12月31号,以前一直有写博客的冲动,但是由于比较懒,记录的都在其他地方,gitbook也了解过,cdsn 注册了一年多了,写博客是用的markdown ,对于我来说比较陌生,一直拖着。直到2015年的最后一天,才开始写。好了,废话不多说。下面介绍的是具体的几种方法

方法一 在xml中直接限制字符的长度

  1. android:maxLength="10" 即限制最大输入字符个数为10
    maxLength的属性 是对 EditText 的字数进行控制的。不管中文还是英文。都是30个字符。显然这存在一定的局限性
  2. android:maxEms //设置TextView的宽度为最长为N个字符的宽度
    这个就更加的不靠谱了,实际情况汉子和英文字符同时出现根本不符合要求。

方法二 通过InputFilter来实现

editText.setFilters(new InputFilter[]{new InputFilter.LengthFilter(20)}); 即限定最大输入字符数为20,基本能满足需求.
如果需要更加精确的判断需要重写InputFilter,代码如下:

 private class NameLengthFilter implements InputFilter {
        int MAX_EN;// 最大英文/数字长度 一个汉字算两个字母
        String regEx = "[\\u4e00-\\u9fa5]"; // unicode编码,判断是否为汉字

        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) {
                Toast.makeText(MainActivity.this, getString(R.string.count),
                        Toast.LENGTH_SHORT).show();
                return "";
            } 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;
        }
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36

改完后能更加精确的判断 editText.setFilters(new InputFilter[]{new NameLengthFilter(20)});

方法三 通过监听editText的输入字符的事件

在监听字符串输入的时候,通过ASCII码判断字符串的个数

edittext.addTextChangedListener(new TextWatcher(){
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count,
                    int after) {}

            @Override
            public void onTextChanged(CharSequence s, int start, int before,
                    int count) {
                int editStart = getSelectionStart();  
                int editEnd = getSelectionEnd(); 
                while (calculateLength(s.toString()) > 20) { 
                    // 当输入字符个数超过限制的大小时,进行截断操作  
                    ((Editable) s).delete(editStart - 1, editEnd);  
                    editStart--;  
                    editEnd--;  
                }
            }

            @Override
            public void afterTextChanged(Editable s) {}
        });
    }

    private long calculateLength(CharSequence c) {  
        double len = 0;  
        for (int i = 0; i < c.length(); i++) {  
            int tmp = (int) c.charAt(i);  
            if (tmp > 0 && tmp < 127) {  
                len += 0.5;  
            } else {  
                len++;  
            }  
        }  
        return Math.round(len);  
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35

感慨一下,大多数人都在总结2015的得与失,以及2016的计划和期望等等,而我才开始写第一篇博客………..

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/341886
推荐阅读
相关标签
  

闽ICP备14008679号