提示:分析内容过长,如果耽误您宝贵时间,可以直接看末尾解决方案。
strat-----------------------------------------------------------------------------
理解字面意思:在设置Edit光标的时候,测量Edit content length 的时候为0,也就是没有发现测量的内容
先分析源码:
Edit setSelection 其实是调用了Selection的setSelection方法,进入Selection的setSelection查看。
这里可以看到Selection的setSelection方法是一个多态的实现方式,再找到 setSelection(text, index, index);
这里决定了光标的起始和结束的位置,这里我们直接进入getSelectionStart或者 getSelectionEnd查看,因为我们设置setSelection只调用一个形参的方法,所以下面判断肯定是相等的。
这个方法是判断控件是否已有光标,没有则不设置光标位置。再进入Spanned的getSpanStart方法。
可以看到,它是一个接口实现类,具体在哪里实现了呢?我们回到控制台查看异常。
这里是调用顺序,也就是说EditText => Selection => SpannableStringBuilder,我们直接看SpannableStringBuilder源码。
SpannableStringBuilder实例化的时候就实现了Spanned的getSpanStart方法,接着往下看。
这里有个测量范围值的方法,应该就是用来测量测容长度的一个实现方法。再找到chekeRange。
问题已经显而易见了,也就是说,strat或者end大于文本内容的长度,所以直接抛出异常。
也就说可能你的EditText里面没有内容,或者是EditText设置了maxLength,而strat或end大于maxLength,这些情况都会报这类错误,所以检查一下自己的代码有没有以上描述的两种情况就行了
end-----------------------------------------------------------------------------
本人菜鸟一枚,不足之处,还望指点