字体家族导致安卓26上的NPE

问题描述:

我的应用在android 26上崩溃,我的理解是它是由font-family和支持库引起的,但我无法弄清楚原因。 在Android 8.0以下的设备上工作正常。字体家族导致安卓26上的NPE

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 

通过只使用的xmlns:应用程序是为Android V26

<font 
    app:font="@font/cuprum_regular" 
    app:fontStyle="normal" 
    app:fontWeight="400"/> 

工作从Fonts in XML docs

Support Library 26.0提供support于运行Android API version 14 and higher设备Fonts in XML功能 。

When you declare font families in XML layout through the support library, use the app namespace.

由于您的应用支持的API 14,所以你必须使用app命名空间,而不是android

我使用支持库版本27.0.1我当我使用可下载的字体时,在Android Oreo上发生了完全相同的崩溃https://developer.android.com/guide/topics/ui/look-and-feel/downloadable-fonts.html
而不是使用可下载的字体,我只是从谷歌字体网站下载字体,并将它们放在res \ fonts目录中。字体家族xml文件保持不变。 我测试过它,它在所有Android版本上都有。这是一个错误,或者我没有正确设置可下载字体,即使我使用内置向导来添加新字体。