disign.widget
包提供了TextInputLayout
挺好用的,一般都是搭配TextInputEditText
来实现,错误提示,hint
提示这些,使用很方便。
但是在魅族手机上导致了崩溃(机型android 7.0 魅族5),追踪日志是调用 getLineForOffset()
抛异常了。
java.lang.NullPointerException: Attempt to invoke virtual method 'int android.text.Layout.getLineForOffset(int)' on a null object reference
at android.widget.Editor.updateCursorPositionMz(Editor.java:6964)
at android.widget.Editor.updateCursorsPositions(Editor.java:1760)
从日志中可以看到在魅族手机上是调用updateCursorPositionMz()
抛了异常,而我查遍系统Editor
源码都没有发现这个方法,说明这应该是魅族修改了系统源码导致。所以只能另谋他法,使用其他控件替换TextInputEditText
。我们可以使用AppCompatEditText
来替换TextInputEditText
来实现,果然测试成功,不崩溃,老铁,没毛病!
stackoverflow
上也有人提问 NullPointerException on Meizu devices in Editor.updateCursorPositionMz,感兴趣的可以去看看。
致敬前辈,砥砺前行!