Editor.java IndexOutOfBoundsException offset(x) 应小于行限制(y)

mic*_*hen 15 android android-edittext

嗨,有人知道这次事故吗?

仍然困惑如何重现。从 stackTrace 来看,它与电子邮件 EditText 相关。

大多数发生在小米的 Redmi 设备和 100% Android 10 上

全栈跟踪

Editor.java line 3324
Fatal Exception: java.lang.IndexOutOfBoundsException
offset(18) should be less than line limit(17)

    android.text.TextLine.measure (TextLine.java:353)
    android.text.Layout.getHorizontal (Layout.java:1213)
    android.text.Layout.getHorizontal (Layout.java:1190)
    android.text.Layout.getPrimaryHorizontal (Layout.java:1160)
    android.text.Layout.getPrimaryHorizontal (Layout.java:1149)
    android.widget.Editor$ActionPinnedPopupWindow.computeLocalPosition (Editor.java:3324)
    android.widget.Editor$PinnedPopupWindow.show (Editor.java:3628)
    android.widget.Editor$ActionPinnedPopupWindow.show (Editor.java:3471)
    android.widget.Editor$EmailAddPopupWindow.show (Editor.java:4995)
    android.widget.Editor$1.run (Editor.java:1528)
    android.os.Handler.handleCallback (Handler.java:914)
    android.os.Handler.dispatchMessage (Handler.java:100)
    android.os.Looper.loop (Looper.java:225)
    android.app.ActivityThread.main (ActivityThread.java:7563)
    java.lang.reflect.Method.invoke (Method.java)
    com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:539)
    com.android.internal.os.ZygoteInit.main (ZygoteInit.java:994)
Run Code Online (Sandbox Code Playgroud)

Sik*_*.ph 1

offset(X) should be less than line limit(Y)
Run Code Online (Sandbox Code Playgroud)

我在 Android 12+ 中遇到了类似的错误EditText。当由于某种原因EditText.getText().length()(在上面的错误中称为Y)与复制粘贴文本的实际长度(在上面的错误中称为X )不匹配时,就会发生这种情况。

我们的解决方法是扩展EditText然后手动调用setText("", TextView.BufferType.EDITABLE)(在我们的例子中,在 中onTextContextMenuItem),因为它似乎用实际文本长度更正了预期文本长度。