首页 > 其他 > 详细

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

时间:2015-06-02 18:18:57      阅读:482      评论: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
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!