web-dev-qa-db-fra.com

Élément de police introuvable helvetica.ttf sur lollipop

Pour une raison quelconque sur Lollipop, je reçois cette erreur et puisque Lollipop est si nouveau, je ne peux pas savoir pourquoi et je n'ai aucune idée de comment le comprendre. Merci d'avance Erreur Logcat:

Java.lang.RuntimeException: Unable to start activity                                       
ComponentInfo{com.bent.MissionaryTracker/com.bent.MissionaryTracker.MainActivity}:          
Java.lang.RuntimeException: Font asset not found helvetica.ttf
at Android.app.ActivityThread.performLaunchActivity(ActivityThread.Java:2298)
at Android.app.ActivityThread.handleLaunchActivity(ActivityThread.Java:2360)
at Android.app.ActivityThread.access$800(ActivityThread.Java:144)
at Android.app.ActivityThread$H.handleMessage(ActivityThread.Java:1278)
at Android.os.Handler.dispatchMessage(Handler.Java:102)
at Android.os.Looper.loop(Looper.Java:135)
at Android.app.ActivityThread.main(ActivityThread.Java:5221)
at Java.lang.reflect.Method.invoke(Native Method)
at Java.lang.reflect.Method.invoke(Method.Java:372)
at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:899)
at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:694)
Caused by: Java.lang.RuntimeException: Font asset not found helvetica.ttf
at Android.graphics.Typeface.createFromAsset(Typeface.Java:190)
at com.bent.MissionaryTracker.MainActivity.onCreate(MainActivity.Java:57)
at Android.app.Activity.performCreate(Activity.Java:5933)
at Android.app.Instrumentation.callActivityOnCreate(Instrumentation.Java:1105)
at Android.app.ActivityThread.performLaunchActivity(ActivityThread.Java:2251)
... 10 more

MODIFIER: ICI IS LE CODE QUI LANCE L'ERREUR

    title = (TextView) findViewById(R.id.title);


    Typeface font = Typeface.createFromAsset(getAssets(), "helvetica.ttf");
    title.setTypeface(font);

J'ai helvetica.ttf dans mon dossier d'actifs dans mes dossiers de projet.

EDIT: Cette application fonctionne sur tous les appareils jusqu'à la version 5.0, donc pour une raison quelconque, 5.0 ne reconnaît pas le fichier dans mon dossier d'actifs.

J'ai essayé d'en poster une capture d'écran dans mon dossier d'actifs mais je n'ai pas assez de réputation pour poster des images.

37
Sloganho

Si vous travaillez sur Android Studio assurez-vous que votre dossier de ressources est sous principal et non rés Cela a fonctionné pour moi

75
Sagar Devanga

Maintenant, il est préférable d'utiliser des polices personnalisées cette approche

Stockez les polices dans res/font

Pour utiliser la police de caractères:

Typeface typeface = ResourcesCompat.getFont(context, R.font.myfont);
37
Penzzz

J'ai aussi eu ce problème avant de réaliser que je n'avais pas mis "fonts /" avant le fichier .otf

 Typeface font = Typeface.createFromAsset(getAssets(),"fonts/TTMastersDEMOBlack.ttf");
30
keredniy

Cela a fonctionné pour moi. Dans mon cas, cela n'a pas fonctionné car j'ai créé le dossier des ressources en res et non en principal.

enter image description here

16
Jorge Casariego

Si le changement de répertoire ne fonctionne pas, cela pourrait être dû à un problème déjà résolu par l'équipe Android mais qui ne l'a pas fait à temps pour 5.0. Tout est expliqué ici:

https://code.google.com/p/Android-developer-preview/issues/detail?id=608&thanks=608&ts=1404735239

La solution de contournement (du moins c'était pour moi) est de corriger les fichiers de police avec TTX comme mentionné dans le problème lié.

Faire fonctionner TTX peut être un peu compliqué si vous n'avez aucune expertise python donc j'ai fini par télécharger AFDKO d'Adobe qui inclut TTX. Vous devez exécuter 'ttx yourfontfile.ttf 'qui transformera votre fichier en .ttx puis le réexécutera' ttx yourfontfile.ttx 'pour obtenir un nouveau .ttf qui fonctionne avec 5.0.

8
Nublodeveloper

Placez simplement un dossier de ressources dans le répertoire principal. Après cela:

 Typeface typeface=Typeface.createFromAsset(getAssets(),"OpenSans-Light.ttf");
    textView.setTypeface(typeface);
5
Aman Goel

Nettoyez le projet, cela m'a aidé sur Android 6.0

5
keybee

J'ai déjà rencontré ce problème. J'ai supprimé x.ttf, puis j'ai annulé la suppression et j'ai essayé de l'exécuter sans verrou. Donc, mon correctif consistait simplement à le supprimer et à télécharger à nouveau la police et à la coller dans les polices/dossier et tout fonctionnait bien.

4
Leebeedev

Ok les gars,

J'ai rencontré le même problème. Tout d'abord, j'ai rendu ma logique de chargement de polices à l'épreuve des plantages:

/**
 * Init method. This method must be called before any other call in this class.
 */
public static void init () {
    fontPlain  = createFont( "helvetica.ttf" , Typeface.NORMAL );
    fontBold   = createFont( "helveticab.ttf", Typeface.BOLD   );
}

/**
 * Load font from assets font folder.
 */
public static Typeface createFont (String font, int style) {
    Typeface typeface;
    try {
        AssetManager assets = Kit.getAppContext().getAssets();
        typeface = Typeface.createFromAsset( assets, "fonts" + File.separator + font );
    }
    catch (RuntimeException e) {
        // createFromAsset() will throw a RuntimeException in case of error.
        Log.e( Constants.TAG, "Unable to create font: " + font, e );
        typeface = Typeface.defaultFromStyle( style );
    }
    return typeface;
}

Et puis j'ai aussi téléchargé une autre police de ce projet dans git:

https://github.com/dimanchec3/Tutoriapps-Android/blob/master/assets/Helvetica.ttf

J'ai réalisé que mon ancienne police était de 56 Ko et cette nouvelle police de 84 Ko. Je suppose que j'avais une ancienne version de la police.

Veuillez vous assurer que vous disposez de la licence appropriée avant d'utiliser cette police.

2
Sileria