【问题标题】:TextView TextAllCaps crashing applicationTextView TextAllCaps 崩溃的应用程序
【发布时间】:2020-02-17 19:31:21
【问题描述】:

我的TextView 出现了非常奇怪的行为。我似乎找不到原因,因为此堆栈跟踪的大多数其他问题都与 EditText 有关。

这是我的布局:

<TextView
        android:id="@+id/transaction_card_scan_message_view"
        android:layout_width="0dp"
        android:layout_height="150dp"
        android:elevation="2dp"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        android:lines="5"
        android:textColor="@color/transaction_text"
        android:textSize="@dimen/transaction_card_scan_title_textSize"
        android:textAlignment="center"
        android:textAllCaps="true"/>

我收到此错误:

2019-10-21 17:47:32.177 18455-18455/com.iaxept.contactless E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.iaxept.contactless, PID: 18455
java.lang.IndexOutOfBoundsException
    at android.graphics.Paint.getRunAdvance(Paint.java:2986)
    at android.text.TextLine.handleText(TextLine.java:719)
    at android.text.TextLine.handleRun(TextLine.java:873)
    at android.text.TextLine.measureRun(TextLine.java:387)
    at android.text.TextLine.measure(TextLine.java:277)
    at android.text.TextLine.metrics(TextLine.java:251)
    at android.text.Layout.getLineExtent(Layout.java:1094)
    at android.text.Layout.drawText(Layout.java:383)
    at android.widget.Editor.drawHardwareAccelerated(Editor.java:1903)
    at android.widget.Editor.onDraw(Editor.java:1822)
    at android.widget.TextView.onDraw(TextView.java:6691)
    at android.view.View.draw(View.java:18319)
    at android.view.View.updateDisplayListIfDirty(View.java:17297)
    at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3950)
    at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3930)
    at android.view.View.updateDisplayListIfDirty(View.java:17260)
    at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3950)
    at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3930)
    at android.view.View.updateDisplayListIfDirty(View.java:17260)
    at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3950)
    at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3930)
    at android.view.View.updateDisplayListIfDirty(View.java:17260)
    at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3950)
    at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3930)
    at android.view.View.updateDisplayListIfDirty(View.java:17260)
    at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3950)
    at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3930)
    at android.view.View.updateDisplayListIfDirty(View.java:17260)
    at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3950)
    at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3930)
    at android.view.View.updateDisplayListIfDirty(View.java:17260)
    at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3950)
    at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3930)
    at android.view.View.updateDisplayListIfDirty(View.java:17260)
    at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3950)
    at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3930)
    at android.view.View.updateDisplayListIfDirty(View.java:17260)
    at android.view.ThreadedRenderer.updateViewTreeDisplayList(ThreadedRenderer.java:666)
    at android.view.ThreadedRenderer.updateRootDisplayList(ThreadedRenderer.java:672)
    at android.view.ThreadedRenderer.draw(ThreadedRenderer.java:780)
    at android.view.ViewRootImpl.draw(ViewRootImpl.java:3112)
    at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:2908)
    at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2502)
    at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1509)
    at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7051)
    at android.view.Choreographer$CallbackRecord.run(Choreographer.java:927)
    at android.view.Choreographer.doCallbacks(Choreographer.java:702)
    at android.view.Choreographer.doFrame(Choreographer.java:638)
    at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:913)
    at android.os.Handler.handleCallback(Handler.java:751)
    at android.os.Handler.dispatchMessage(Handler.java:95)
    at android.os.Looper.loop(Looper.java:154)
    at android.app.ActivityThread.main(ActivityThread.java:6692)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1468)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1358)

我试过messageView.setTransformationMethod(new AllCapsTransformationMethod(getParentActivity())) 无济于事。这真的很奇怪,因为当文本是小写和大写的混合并且堆栈跟踪不是完全有用时,它可以正常工作。

【问题讨论】:

  • 不知道这样做是否明智,但作为一种解决方法,您可以检查文本,看看它是否包含大小写字母,然后才调用您的函数。跨度>
  • 感谢您的建议,但您指的是哪个函数?
  • 你声称的那个可以混合使用大小写字母。
  • 抱歉,我可能不够清楚。 TextView 在没有textAllCaps 的情况下正常工作,但没有它。我试过的功能没有用。

标签: android android-layout text textview


【解决方案1】:

我相信这是一个 Android 操作系统错误,因为当我在所有 setText()append() 调用中使用 toUpperCase() 时,没有崩溃,因此可以作为临时解决方案。但是,android:textAllCaps="true" 问题仍然存在,需要修复。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-07
    相关资源
    最近更新 更多