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

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);
    }
}



转载于:https://my.oschina.net/djone/blog/423861

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值