我的应用程序崩溃在android 26上,我的理解是它是由font-family和支持库引起的,但我无法弄清楚原因。 在Android 8.0以下的设备上,它可以正常工作。
Caused by: android.view.InflateException: Binary XML file line #0: Error inflating class Button
Caused by: java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
at android.support.v4.graphics.TypefaceCompatApi26Impl.addFontFromAssetManager(TypefaceCompatApi26Impl.java:150)
at android.support.v4.graphics.TypefaceCompatApi26Impl.createFromFontFamilyFilesResourceEntry(TypefaceCompatApi26Impl.java:218)
at android.support.v4.graphics.TypefaceCompat.createFromResourcesFamilyXml(TypefaceCompat.java:116)
at android.support.v4.content.res.ResourcesCompat.loadFont(ResourcesCompat.java:249)
at android.support.v4.content.res.ResourcesCompat.loadFont(ResourcesCompat.java:213)
at android.support.v4.content.res.ResourcesCompat.getFont(ResourcesCompat.java:206)
at android.support.v7.widget.TintTypedArray.getFont(TintTypedArray.java:119)
at android.support.v7.widget.AppCompatTextHelper.updateTypefaceAndStyle(AppCompatTextHelper.java:208)
at android.support.v7.widget.AppCompatTextHelper.loadFromAttributes(AppCompatTextHelper.java:152)
at android.support.v7.widget.AppCompatTextHelperV17.loadFromAttributes(AppCompatTextHelperV17.java:38)
at android.support.v7.widget.AppCompatButton.<init>(AppCompatButton.java:77)
at android.support.v7.widget.AppCompatButton.<init>(AppCompatButton.java:67)
at android.support.v7.app.AppCompatViewInflater.createView(AppCompatViewInflater.java:109)
at android.support.v7.app.AppCompatDelegateImplV9.createView(AppCompatDelegateImplV9.java:1024)
at android.support.v7.app.AppCompatDelegateImplV9.onCreateView(AppCompatDelegateImplV9.java:1081)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:772)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:730)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:863)
at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:866)
at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:866)
at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824)
at android.view.LayoutInflater.inflate(LayoutInflater.java:515)
at android.view.LayoutInflater.inflate(LayoutInflater.java:423)
at android.view.LayoutInflater.inflate(LayoutInflater.java:374)
at android.support.v7.app.AppCompatDelegateImplV9.setContentView(AppCompatDelegateImplV9.java:287)
at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:139)
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Method.invoke(Native Method)
at android.support.v4.graphics.TypefaceCompatApi26Impl.addFontFromAssetManager(TypefaceCompatApi26Impl.java:145)
... 42 more
Caused by: java.lang.NullPointerException
at android.graphics.FontFamily.nAddFontFromAssetManager(Native Method)
at android.graphics.FontFamily.addFontFromAssetManager(FontFamily.java:149)
... 44 more
答案 0 :(得分:6)
仅使用xmlns:app它适用于android v26
<font
app:font="@font/cuprum_regular"
app:fontStyle="normal"
app:fontWeight="400"/>
答案 1 :(得分:2)
Support Library 26.0
为support
功能提供了Fonts in XML
在运行Android API的设备上version 14 and higher
。
When you declare font families in XML layout through the support
library, use the app namespace.
由于您的应用支持API 14,因此您必须使用app
命名空间而不是android
答案 2 :(得分:0)
我正在使用支持库版本 27.0.1 ,当我使用可下载字体https://developer.android.com/guide/topics/ui/look-and-feel/downloadable-fonts.html时,我在Android Oreo上遇到了完全相同的崩溃
我没有使用可下载的字体,而是从Google字体网站下载字体并将它们放在 res \ fonts 目录中。字体系列 xml 文件保持不变。
我测试了它,它适用于所有Android版本。这是一个错误,或者我没有正确设置可下载字体,即使我使用内置向导添加新字体。
答案 3 :(得分:0)
我有与OP所指的相同的问题,实际上是相同的崩溃堆栈跟踪。
我注意到当我使用Gradle构建时使用27.0.2版本的appcompat支持库时,我已经修复了这个问题。
对于可能依赖于框架提供支持库的自定义AOSP应用程序开发人员来构建启用字体API的应用程序,您可以参考此提交以获取修复:https://android.googlesource.com/platform/frameworks/support/+/d96eeb46571f2d01c63d21d3aee4ba9bf4b10c53
如果您正在使用Android Studio / Gradle进行开发,只需将支持库更新为27.0.2或更高版本即可。