RJF*_*res 12 android android-fonts android-studio-3.0
在我的活动中,我有一个自定义工具栏.我正在尝试更改其标题字体.
以前,我可以通过将字体放在资产文件夹中来做到这一点.使用Android Studio 3,我们现在可以使用fontFamily和FontsContract.我通过以下代码尝试了这种方法:
mToolbar.setTitleTextAppearance(context,R.style.AppTheme_ActionBarText);
Run Code Online (Sandbox Code Playgroud)
和风格
<style name="AppTheme.ActionBarText" parent="@android:style/Widget.ActionBar.TabText">
<item name="fontFamily">@font/ultra</item>
</style>
Run Code Online (Sandbox Code Playgroud)
当我运行应用程序时,几秒钟后(下载自定义字体所需的时间),应用程序崩溃与下面的日志:
java.lang.NullPointerException:尝试从android.support.v4.provider.FontsContractCompat $ 2.onReply(FontsContractCompat.java)上的空对象引用中读取字段'int android.support.v4.provider.FontsContractCompat $ TypefaceResult.mResult'. 277)在android.support.v4.pro4.ider的android.support.v4.provider.FontsContractCompat $ 2.onReply(FontsContractCompat.java:274)android.support.v4.provider.FontsContractCompat $ 3.onReply(FontsContractCompat.java:312) .FontsContractCompat $ 3.onReply(FontsContractCompat.java:300)在android.support.v4.provider.SelfDestructiveThread $ 2 $ 1.run(SelfDestructiveThread.java:149)在android.os.Handler.handleCallback(Handler.java:739)在android .os.Handler.dispatchMessage(Handler.java:95)位于android.app.Looper.loop(Looper.java:158),位于java.lang.reflect的android.app.ActivityThread.main(ActivityThread.java:7225). Com.android.internal.os.Zygot上的com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1230)中的Method.invoke(Native Method)eInit.main(ZygoteInit.java:1120)
这是一个错误还是有正确的方法通过xml加载字体?我知道另一种方法是以编程方式加载字体并使用监听器在文本上设置字体.
**编辑:在第二次应用程序运行时,没有发生崩溃(因为已经下载了字体).出于测试目的,我在每次崩溃后都要更改字体以进行调试...
当用户尝试使用可下载字体启动应用程序时,如果设备上没有互联网并且之前未下载此字体,则会出现问题.然后应用程序将启动,但崩溃只会在~5-10 sech之后发生.我认为当http超时发生时.
所以我没有解决方案,因此使用xml-fonts而不是可下载的字体,请参阅https://developer.android.com/guide/topics/ui/look-and-feel/fonts-in-xml.html
仅供参考:所有可下载字体都加载到您设备上的/data/data/com.google.android.gms/files/fonts文件夹中,如果您有root设备,则可以轻松删除并重现此问题一次.