在 EditText 输入中追加空格

作者: Chenstyle | 来源:发表于2016-09-26 18:41 被阅读660次

    精髓一句:

    在增加字符的时候,输入数字:count == 1,输入英文字符,count会等于23456....取决于单词的长度。所以,只要把判定条件改为:count != 0, 即可。

    今天遇到的需求,也没问旁边的前辈,撸起袖子就开搞了。

    每输入4位数字自动做空格处理,限定输入框长度16位,不包括空格。

    看到这个需求,想法都是很简单的,在TextWatcher中做监听就行了。不管是直接让Activity实现TextWatcher接口也好,还是直接给EditText加上AddTextChangeListener然后new也好。

    接着开始搜索一下,搜索到这么一篇东西:EditText输入手机号自动带空格。他在代码中很简单暴力的就开始使用了一个StringBuilder对象,来实现追加功能。

    这样做明显是不妥的,即使Java有自动GC机制,但是也架不住EditText中的字符每改变一次就new一个对象啊!

    然后看了这一篇:[原创]Android实现输入手机号时自动添加空格

    在这篇博文中的代码相对靠谱。

    
    public void onTextChanged(CharSequence s, int start, int before, int count) {
        DLog.d("----------onTextChanged----------\n");
        DLog.d("s:" + s + "\n");
        DLog.d("start:" + start + "\n");
        DLog.d("before:" + before + "\n");
        DLog.d("count:" + count + "\n");
    
        if (count == 1){
            int length = s.toString().length();
            if (length == 3 || length == 8){
                editText.setText(s + " ");
                editText.setSelection(editText.getText().toString().length());
            }
        }
    }
    
    

    修改之后,旁边的前辈说他之前也写过这个。不过最后因为光标会跳,而且还没有解决。

    原代码我已经删了,这里就不贴出来了。

    然后我开始去看他写的,并将我写的加入到之前的代码之中。

    这个时候发现了一个BUG:在原生模拟器之中,输入法会自动将输入的英文字符拼接成为一个单词,这个时候,这个方法会失效。

    接着我开始Debug,最后发现。在增加字符的时候,输入数字:count == 1, 输入英文字符,count 会等于23456....取决于单词的长度。

    所以,只要把判定条件改为:count != 0, 即可。

    我的最终源码:

    @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
    
            if (count != 0) {
                int length = s.length() + 1;
                if (length % 5 == 0 && length < 20) {
                    edx.setText(s + " ");
                    edx.setSelection(length);
                }
            }
        }
    

    相关文章

      网友评论

      • c459beb59113:还是有点问题,比如先输入一串12345,然后在中间插入,比如在2后面插入输入,光标还是会跳
      • 38fe8047a388:如果count!=1就不行了,如count=6等
        Chenstyle:@海琦 count是一次性输入字符的长度,你永远也不知道用户是用什么样的姿势在输入

      本文标题:在 EditText 输入中追加空格

      本文链接:https://www.haomeiwen.com/subject/qzbqyttx.html