2016-06-15 11 views
1

Ich habe jeden SO Post in Bezug auf die Verwendung von Schriftarten in Android gelesen und ich kann immer noch nicht meins zur Arbeit. Ich erhalte die folgende Ausnahme:Kann nicht Schriftart in Android verwenden

java.lang.RuntimeException: native typeface cannot be made

mein Code Hier ist (diese Klasse und statische Methode aus here genommen wird):

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); 
     } 
    } 
} 

Die Schrift ist im assets/fonts Ordner:

(das ist immer noch Eclipse. Ich weiß, ich weiß).

Dinge, die ich habe versucht:

  • Ich habe versucht, die Schrift an die Wurzel des assets Ordner verschieben und die assetPath aktualisieren.
  • Ich überprüfte Ordner und Dateiberechtigungen.
  • Ich habe versucht, den Anwendungskontext anstelle des Aktivitätskontextes zu verwenden, den ich bekomme.
  • Ich habe versucht, verschiedene Schriftart-Dateien (eine per E-Mail senden, eine andere aus dem Internet heruntergeladen).

Antwort

1

Als ich diese Frage erstellte, lief ich in die Lösung. Ich habe ein paar Stunden damit verbracht, also denke ich, es lohnt sich, es zu behalten.

Mein Problem war, dass ich an einem Bibliotheksprojekt arbeitete. Demnach (Android Library assets folder doesn't get copied) sind Assets in Bibliotheksprojekten für das Hauptprojekt nicht verfügbar, weshalb die Fontdatei nicht gefunden wurde. (Auch dieses Projekt verwendet immer noch Eclipse. Möglicherweise nicht mit Gradle + AS).

Die Lösung besteht darin, die Schriftarten in das Hauptprojekt zu kopieren, und voila!

+1

"Möglicherweise nicht mit Gradle + AS" - korrekt. Assets in Bibliotheksmodulen in Android Studio oder anderen Gradle-basierten Android-Builds sind im endgültigen APK enthalten. – CommonsWare