【问题标题】:Android: TextView property "textAllCaps" causes XML Inflate error when fontFamily is set to sans-serif-condensedAndroid:当 fontFamily 设置为 sans-serif-condensed 时,TextView 属性“textAllCaps”会导致 XML Inflate 错误
【发布时间】:2018-12-05 17:10:44
【问题描述】:

这是一个有趣的错误,我能够始终如一地重现它。我想知道是否有其他人注意到它;我找不到任何关于它的报告。

TextView 小部件有一个名为textAllCaps 的属性,用于强制其中显示的任何文本全部大写。自 API 级别 14(冰淇淋三明治)以来,此属性一直在 Android 中。但是,我最近发现,如果您将应用程序的 Font Family 设置为 sans-serif-condensed,请将其放入 styles.xml:

<item name="android:fontFamily">sans-serif-condensed</item>

然后,当任何具有带有textAllCaps=true 的TextView 的布局被膨胀时,它会崩溃并带有InflateException:

12-05 09:18:48.847 16727 16727 E AndroidRuntime: android.view.InflateException: Binary XML file line #49: Binary XML file line #49: Error inflating class TextView
12-05 09:18:48.847 16727 16727 E AndroidRuntime: Caused by: android.view.InflateException: Binary XML file line #49: Error inflating class TextView
12-05 09:18:48.847 16727 16727 E AndroidRuntime: Caused by: java.lang.ArrayIndexOutOfBoundsException: length=57; index=2491

有人遇到过这种情况吗?

【问题讨论】:

  • 你有没有尝试把它放在像这样的字体文件夹中 @font/sans-serif-condensed
  • 编译时出现“找不到资源”错误。
  • 重命名字体。直接从 xml android:fontFamily="@font/sans_serif_condensed" 调用。让我知道

标签: android android-layout textview


【解决方案1】:

我已经看到了,将 TextView 样式属性设置为应用程序主题样式可以防止我崩溃。

例子:

<style names="MyAppTheme">
   <item name="android:fontFamily">sans-serif</item>
</style>

然后:

<TextView
        style="@style/MyAppTheme"
        ...
        android:textAllCaps="true" />

编辑以获取更多信息:

进一步查看后,我最好的猜测是错误在于 TextView 代码。原始崩溃是 indexOutOfBoundsException,在问题中显示如下:

length=57; index=2491

我认为57个元素列表是TextView可用的样式信息,2491+元素列表是应用于TextView的样式信息,包括AppTheme信息。要应用 textAllCaps 属性,可能需要位置 2491 处的样式项。这个问题很可能是 TextView 没有意识到额外的样式信息,除非明确设置,因此上述修复规避了这个问题。

【讨论】:

    【解决方案2】:

    这是一个已知的错误,可以在此处跟踪 - https://issuetracker.google.com/issues/64053344。

    这里有一个快速的解决方法。修改代码

    发件人:

    <style name="AppCompatTheme" parent="android:...">
      <item name="fontFamily">sans-serif-condensed</item>
    </style>
    

    到这里:

    <style name="AppCompatTheme" parent="android:...">
       <item name="fontFamily">@string/default_font</item>
    </style>
    

    并在strings.xml文件中定义default_font。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-07-05
      相关资源
      最近更新 更多