实时监听Edittext输入字数,达到限制数后禁止输入

int limit =200;

//  用来记录输入字符的时候光标的位置

int cursor =0;

// 用来标注输入某一内容之前的编辑框中的内容的长度

int before_length;

代码:

mEdtReason.addTextChangedListener(new TextWatcher() {

@Override

    public void beforeTextChanged(CharSequence s, int start, int count,int after) {

before_length = s.length();

    }

/**

    * s 编辑框中全部的内容 、start 编辑框中光标所在的位置(从0开始计算)、count 从手机的输入法中输入的字符个数

    */

    @Override

    public void onTextChanged(CharSequence s, int start, int before, int count) {

cursor = start;

        mTvNumLimit.setText(s.length()+"/"+limit);

        //Log.e("此时光标的位置为", cursor + "");

    }

@Override

    public void afterTextChanged(Editable s) {

// 这里可以知道你已经输入的字数,大家可以自己根据需求来自定义文本控件实时的显示已经输入的字符个数

        // 输入内容后编辑框所有内容的总长度

        int after_length = s.length();

        // 如果字符添加后超过了限制的长度,那么就移除后面添加的那一部分,这个很关键        if (after_length >limit) {

// 比限制的最大数超出了多少字

            int d_value = after_length -limit;

            // 这时候从手机输入的字的个数            int d_num = after_length -before_length;

            // 需要删除的超出部分的开始位置            int st =cursor + (d_num - d_value);

            // 需要删除的超出部分的末尾位置

            int en =cursor + d_num;

            // 调用delete()方法将编辑框中超出部分的内容去掉

            Editable s_new = s.delete(st, en);

            // 给编辑框重新设置文本            mEdtReason.setText(s_new.toString());

            // 设置光标最后显示的位置为超出部分的开始位置,优化体验

            mEdtReason.setSelection(st);

        }

}

});

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Emacs tutorial. See end for copying conditions. Emacs教程。...
    李2牛阅读 1,627评论 0 4
  • 一、Python简介和环境搭建以及pip的安装 4课时实验课主要内容 【Python简介】: Python 是一个...
    _小老虎_阅读 5,803评论 0 10
  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 6,508评论 0 17
  • 我的三外公,你在天堂还好吗? 我相信有来生,相信上帝和天堂,不是迂腐,我是为让自己愧疚的心有所安放。 我的三外公是...
    胡益达阅读 452评论 5 7
  • 感赏孩子他爸在县教育局乡计生办辗转了好多次办好了独生子女证,并交到儿子现就读的学校,给儿子的升学又增加些希望。感赏...
    伶丽阅读 136评论 0 0