码迷,mamicode.com
首页 > 其他好文 > 详细

TextView设置LengthFilter,粘贴超长文本的时候没有提示的解决方法

时间:2015-06-02 18:21:05      阅读:86      评论:0      收藏:0      [点我收藏+]

标签:

TextView设置LengthFilter,正常情况下用户字符超长则会有提示。

但是,如果是粘贴文字,比如限制最大100字,当文本框已有50字,一次性粘贴51字,可以看到最后一个字会丢失,但是不会弹出提示。

总之洒家之前的判断条件是错了,打了一下午的log,新算出一个条件来。。。

记录+分享~

private static class TextLengthFilter extends InputFilter.LengthFilter {

    private Context mContext;
    private int mLen;

    public TextLengthFilter(Context context, int len) {
        super(len);
        mLen = len;
        mContext = context;
    }

    @Override
    public CharSequence filter(CharSequence source, int start, int end,
                               Spanned dest, int dstart, int dend) {
        Log4j.e("dj", "TextLengthFilter.filter,dest.length()=" + dest.length() + ";source.length()=" + source.length() + ";start=" + start + ";end=" + end + ";dstart=" + dstart + ";dend=" + dend);
        // 从log来看,dest表示文本框原有的内容,source表示新的内容
        // start、end 表示新内容截取的起始、终止位置~没看出有什么作用
        // dstart、dend 表示需要从dest截取掉的字符串起始、终止位置。想看效果的话请这么做:输入10个字符,选取范围2-5字符,然后粘贴。或者删除一个字符。
        
        // dest的长度减去被删除的长度,为文本框将保留的原内容长度
        int keepLen = dest.length() - (dend - dstart); 
        int insertLen = source.length();
        int newLen = keepLen + insertLen;
        Log4j.e("dj", "TextLengthFilter.filter,keepLen="+keepLen+";insertLen="+insertLen+";newLen="+newLen);
        if (newLen > mLen) {
            Toast.makeText(mContext, "客观,请不要这样", Toast.LENGTH_SHORT).show();
        }
        return super.filter(source, start, end, dest, dstart, dend);
    }
}



TextView设置LengthFilter,粘贴超长文本的时候没有提示的解决方法

标签:

原文地址:http://my.oschina.net/djone/blog/423861

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!