2016-06-15 28 views
1

Androidでフォントの使用に関するすべての投稿を読みましたが、私はまだ仕事をすることができません。Androidでフォントを使用することはできません

java.lang.RuntimeException: native typeface cannot be made

はこちら(hereから取られ、このクラスおよび静的メソッド)私のコードです:私は次の例外を取得しています

public class SafeTypefaces { 

    private static final Hashtable<String, Typeface> cache = new Hashtable<String, Typeface>(); 

    public static Typeface get(Context c) { 

     final String assetPath = "fonts/robotobold.ttf"; 

     synchronized (cache) { 
      if (!cache.containsKey(assetPath)) { 
       try { 
        AssetManager assetManager = c.getAssets(); 
        Typeface t = Typeface.createFromAsset(assetManager, assetPath); //Throws exception on this line! 
        cache.put(assetPath, t); 
       } catch (Exception e) { 
        L.p("Could not get typeface '" + assetPath + "' because " + e.getMessage()); 
        return null; 
       } 
      } 
      return cache.get(assetPath); 
     } 
    } 
} 

フォントがassets/fontsのフォルダにあります。

enter image description here

(これはまだEclipseです。私は知っています)。

物事は私が試した:私はassetsフォルダのルートにフォントを移動しassetPathを更新しようとした

  • フォルダーとファイルのアクセス許可を確認しました。
  • 私は取得しているアクティビティコンテキストの代わりにアプリケーションコンテキストを使用しようとしました。
  • 別のフォントファイルを使用しようとしました(1つは電子メールで送信し、もう1つはインターネットからダウンロードしました)。

答えて

1

この質問を作成していたとき、私は解決策を見つけました。私はこれに数時間を費やしたので、その価値を維持すると思います。

私の問題は、私が図書館プロジェクトに取り組んでいたことでした。この(Android Library assets folder doesn't get copied)によれば、ライブラリプロジェクトのアセットはメインプロジェクトでは使用できないため、フォントファイルが見つからないことがあります。 (このプロジェクトでもまだEclipseを使用していますが、おそらくGradle + ASを使用するケースではありません)。

解決方法は、フォントをメインプロジェクトにコピーすることです。

+1

「Gradle + ASを使用していない可能性があります」 - 正しい。 Android Studioや他のGradleベースのAndroidビルドのライブラリモジュールのアセットは、最終的なAPKに含まれています。 – CommonsWare

関連する問題