2017-10-29 3 views
10

私の活動では、カスタムツールバーがあります。タイトルフォントを変更しようとしています。ツールバーのカスタムフォントを使用するとクラッシュする

以前は、アセットフォルダにフォントを置くことでこれを行うことができました。 Android Studio 3では、fontFamilyとFontsContractを使用できるようになりました。 私は以下のコードを、この方法を試してみました:私はアプリを実行すると、数秒(それはカスタムフォントをダウンロードするのにかかる時間)の後、

mToolbar.setTitleTextAppearance(context,R.style.AppTheme_ActionBarText); 

とスタイル

<style name="AppTheme.ActionBarText" parent="@android:style/Widget.ActionBar.TabText"> 
      <item name="fontFamily">@font/ultra</item> 
     </style> 

のjava.lang.NullPointerException:フィールドから読み取ろうと 'int型 android.support.v4.provider.FontsContractCompat $ TypefaceResult.mResult'以下のログでアプリがクラッシュしますandroid.support.v4.provider.FontsContractCompat $ 2.onReplyでandroid.support.v4.provider.FontsContractCompat $ 2.onReply(FontsContractCompat.java:277) (FontsContractCompat.java:274) ATでヌルオブジェクト参照 にandroid.support.v4.provider.FontsContractCompat $ 3.onReply(FontsContractCompat.java:312) android.support.v4.provider.FontsContractCompat $ 3.onReply(FontsContractCompat.java:300) android.support.v4.provider。 SelfDestructiveThread $ 2 $ 1.run(SelfDestructiveThread.java:149) (android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) はandroid.osです。 Looper.loop(Looper.java:158) android.app.ActivityThread.main(ActivityThread.java:7225) at java.lang.reflect.Method.invoke(ネイティブメソッド) at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java: com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)にて1230)

は、これはバグやXMLを介しフォントをロードするための正しい方法は何ですか? 私は別の方法として、プログラムでフォントをロードし、リスナーを使ってテキストの書体を設定する方法を知っています。

** EDIT:2回目のアプリケーションの実行時に、フォントが既にダウンロードされているためクラッシュしません。テスト目的のために、私はデバッグするすべてのクラッシュの後にフォントを変更しています...

+0

これに関する更新情報はありますか?私は同じ問題を抱えています。 – engincancan

+0

同じ問題に直面しているIm、あなたはそれを解決するために管理しましたか? – busted13

+0

キャッシュが無効で、アンドロイドのスタジオを再起動します。 アンドロイドスタジオ - >ファイル - >無効なキャッシュ/ Restrat – Jovin

答えて

5

問題が起こると、このフォントは以前にダウンロードされていませんでした。その後アプリが起動しますが、クラッシュは5〜10秒後にのみ発生します。私は、httpタイムアウトが発生したと思います。

だから私は、ソリューション、したがって、使用したXML-フォントのダウンロードフォントの代わりにを持っていない、FYI https://developer.android.com/guide/topics/ui/look-and-feel/fonts-in-xml.html

を参照してください。/data/data/com.google.android.gms/filesにロードされたすべてのダウンロード可能なフォント/ fontsフォルダをデバイスに追加します。デバイスをルートしている場合は、この問題を一度に削除して再現するのが簡単です。

+0

これはすでに私がずっと以前にしたことですが、まだプログラム的に行う方法はないようです。他の人がそれを参照したい場合に備えて解決される。ありがとう。 – RJFares

1

docsによると、サポートライブラリ26を使用しているときにapp名前空間を使用する必要があります。

あなたはXMLレイアウトでフォントファミリを宣言する場合サポートライブラリを介して、アプリの名前空間を使用します。だからあなたのコード内の

:ユーザーがデバイスでインターネットが存在しないときにダウンロード可能なフォントでアプリを起動しようとすると

<item name="app:fontFamily">@font/ultra</item> 
+0

styles.xmlでは実際にはapp namespaceを使用できませんので、上記を編集するには単に "app:"を削除してください。しかし、まだ問題は解決されていませんでした:/それ以外のものは、私の質問を編集しました – RJFares

4

編集:問題はサポートライブラリのバージョン27.1.0で修正されているようです。

これはサポートライブラリの問題のようです。 Googleの開発者は、現在リリースされていないバージョン27.0.2の後で修正が利用可能であることを示しています。

https://issuetracker.google.com/issues/69085400

関連する問題