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);
    }
}
时间: 2024-10-05 17:26:28

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

OSS设置CORS规则以后还是报No 'Access-Control-Allow-Origin'解决方法

OSS设置CORS规则以后还是报No 'Access-Control-Allow-Origin'解决方法 在OSS控制台设置了CORS规则以后,通过JS程序去调用的时候报No 'Access-Control-Allow-Origin' header is present on the requested resource,可以通过下面的思路来进行下排查: 1. 确认检查CORS规则是否设置好了,是否设置正确,正确的设置方法如下图: 2. CORS设置都正确的话,那就检查AllowedHeader

关于在设置启动文件夹或者设置用户选项时不能得到当前用户的解决方法

原文:关于在设置启动文件夹或者设置用户选项时不能得到当前用户的解决方法 上一篇:如何设置Installshield中 feature的选中状态 在用到FOLDER_STARTUP或者类似的变量前加一句ALLUSERS=0;然后FOLDER_STARTUP就是指向当前用户了.ALLUSERS是环境变量,不需要你定义.IS版本低时可能不行. 下一篇: MyEclipse中消除frame引起的“the file XXX can not be found.Please check the locatio

Error-Oracle:[INS-30131]执行安装程序验证所需的初始设置失败(无法访问临时位置)解决方法!

ylbtech-Error-Oracle:[INS-30131]执行安装程序验证所需的初始设置失败(无法访问临时位置)解决方法! 1.返回顶部 1. 安装oracle11g或12C碰到“无法访问临时位置”的问题,详细信息如下:[INS-30131]执行安装程序验证所需的初始设置失败(原因:无法访问临时位置)操作 - 请确保当前用户具有访问临时位置所需的权限. 2. 2.返回顶部 1. 解决方案:姑且称为在windows系统安装的 oracle bug吧:针对客户端安装,在cmd中执行命令:实际路

oracle安装报错[INS-30131]执行安装程序验证所需的初始设置失败(无法访问临时位置)解决方法!

最近在电脑上安装oracle12c,安装时,在执行检查环境步骤时候报错: [INS-30131]执行安装程序验证所需的初始设置失败(无法访问临时位置) 最后在网上搜索解决方法,特记录下,以防以后再用到: 1.针对服务端安装 在cmd中执行命令:切换到oracle的安装目录,执行命令:setup.exe -ignorePrereq -J"-Doracle.install.db.validate.supportedOSCheck=false" 2.针对服务端安装 在cmd中执行命令: 切换

iOS 中TextKit的使用中,设置部分字体,出现的问题及解决方法

在ios的TextKit的使用中,设置部分字体大小的时候改变的字 体往往会比自己设置的多,这可能是因为你所设置的文字的那一段 话中出现的中文的标点符号,导致编译器不认识,从而出现问题. 把标点符号改成英文格式就好了.

魅族手机不能通过设置Style和Background展示透明Activity的解决方法

最近开发一个功能,需要实现一个半透明的Activity,之前都是通过在AndroidManifest中设置android:theme="@android:style/Theme.Translucent"的方法实现的.结果QA同学发现在魅族手机上会显示成不透明的灰色效果.后来把Activity的布局文件设置android:background="@color/transparent",还是不起作用. 于是想到改为使用Window的alpha属性来实现,设置Window

DIV(或者其他块级元素)设置float之后无法撑起高度的解决方法

出现的问题是: html: 1 <html> 2 <head> 3 <title>images</title> 4 <link rel="stylesheet" href="main.css" type="text/css" /> 5 </head> 6 <body> 7 <div id="container"> 8 <img

[INS-30131]执行安装程序验证所需的初始设置失败(无法访问临时位置)解决方法!

安装oracle11g或12C碰到“无法访问临时位置”的问题,详细信息如下:[INS-30131]执行安装程序验证所需的初始设置失败(原因:无法访问临时位置)操作 - 请确保当前用户具有访问临时位置所需的权限. 解决方案1:(验证未解决)C:\Users\Administrator>net share C$=C:C$ 共享成功.C:\Users\Administrator>net use \\localhost\c$命令成功完成. 网上很多同样错误,都是让共享下C盘啥的,结果照着做了,没啥用.

Spring Application Context文件没有提示功能解决方法

这里下载Spring. http://repo.spring.io/release/org/springframework/spring/ 1.复制: http://www.springframework.org/schema/beans/spring-beans.xsd 2. 打开Window -> Preferences -> XML Catalog -> Add 这样就可以了.