自从我们升级到 Android Studio 3.0(使用 Android Gradle 插件 3.0.0)后,我们遇到了一个奇怪的问题。
我们的应用程序使用 MaterialEditText图书馆。在 AS 3.0 之前一切正常。现在,在我们将项目迁移到 AS 3.0 并使用此版本的 Android Studio 和相关的 Gradle 插件编译应用程序后,应用程序在使用 MaterialEditText 组件时崩溃:
Caused by: java.lang.RuntimeException: Font asset not found res/drawable-mdpi-v4/ic_clear_search_api_holo_dark.png
at android.graphics.Typeface.createFromAsset(Typeface.java:304)
at com.rengwuxian.materialedittext.MaterialAutoCompleteTextView.getCustomTypeface(MaterialAutoCompleteTextView.java:488)
at com.rengwuxian.materialedittext.MaterialAutoCompleteTextView.init(MaterialAutoCompleteTextView.java:385)
at com.rengwuxian.materialedittext.MaterialAutoCompleteTextView.<init>(MaterialAutoCompleteTextView.java:325)
... 40 more
似乎 typedArray.getString(R.styleable.MaterialEditText_met_accentTypeface)
突然解析为 MaterialAutoCompleteTextView
行 383 中的一些随机可绘制路径.但是,这仅发生在 Android 低于 8.0 的设备上。在 Android 8.0 上,该应用运行良好。
在升级到 AS 3.0 期间我们的样式没有改变:
<item name="met_typeface">fonts/UnitRoundedOT.otf</item>
<item name="met_accentTypeface">fonts/UnitRoundedOT.otf</item>
另请参阅相关的issue MaterialEditText 库。
将 Android 项目迁移到 AS 3.0 时,似乎只使用新的 Gradle 插件
classpath 'com.android.tools.build:gradle:3.0.0'
如果不更改 Gradle 文件的其余部分就足以引发此错误。然而,一个完全迁移的项目也有这个问题。
这可能是 Gradle 插件的错误吗?
最佳答案
显然,这个问题的解决方法是将字体文件的路径放在字符串资源中,并从样式属性中引用这些资源
字符串.xml:
<string name="font_unit_rounded">fonts/UnitRoundedOT.otf</string>
样式.xml:
<item name="met_typeface">@string/font_unit_rounded</item>
<item name="met_accentTypeface">@string/font_unit_rounded</item>
有关详细信息,请参阅 issue 346 .目前还不清楚为什么这个问题突然发生在 Android Studio 3.0 上,并且只适用于 Android < 8.0 的设备。鉴于此问题的随机性,我认为这是 Android Gradle 插件的错误。
关于android - 为使用 Android Studio 3.0 编译的应用程序解决了错误的样式化资源值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47075964/