74 votes

« Police de caractères natif ne peut faire » seulement pour certaines personnes

J’ai une application qui modifie le caractère de certains éléments. Il fonctionne bien pour la plupart des gens, mais peut-être un 0,5 % obtenir une exception lorsque vous essayez de changer la police. La partie importante de la trace de la pile est la suivante :

Comme je le dis, il fonctionne pour la plupart des gens, donc je ne pense pas que c’est un problème avec mon code ou le fichier de police. Toutes les suggestions sur la façon de résoudre ce problème ?

Edit : Il s’agit de mon code :

68voto

Hit Points 4371

Ce bug d'Android OS pourrait être la raison de votre problème:

La police de caractères.createFromAsset fuites d'actifs flux de

Où sont également une solution de contournement dans ce rapport de bug:

J'ai modifié HTH du contournement de sorte que la méthode ne suppose pas la police chemin d'accès ou le format. Le chemin d'accès complet de la police de l'actif doit être présenté comme un paramètre. J'ai aussi enveloppé l'appel à createFromAsset() dans un bloc try-catch, de sorte que la méthode get() renvoie la valeur null si l'actif n'est pas trouvé.

public class Typefaces {
    private static final String TAG = "Typefaces";

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

    public static Typeface get(Context c, String assetPath) {
        synchronized (cache) {
            if (!cache.containsKey(assetPath)) {
                try {
                    Typeface t = Typeface.createFromAsset(c.getAssets(),
                            assetPath);
                    cache.put(assetPath, t);
                } catch (Exception e) {
                    Log.e(TAG, "Could not get typeface '" + assetPath
                            + "' because " + e.getMessage());
                    return null;
                }
            }
            return cache.get(assetPath);
        }
    }
}

52voto

joao_dv Points 536

J’ai suivi certaines des solutions trouvées ici, sans succès. J’ai pensé que c’était quelque chose de vraiment obscur, comme les programmeurs font souvent. Puis j’ai lu quelque part qu'il pourrait être lié à la trajectoire de la police, gotcha :

Au lieu de :

J’ai changé pour :

Et mon fichier se trouve dans assets/fonts/blanch_caps.ttf. Non, il fonctionne comme un charme !

50voto

Lumis Points 10300

Cette erreur est survenue lorsque la police était dans la bibliothèque des actifs de dossier. Quand j'ai copié les actifs de l'application qui a été l'utilisation de cette bibliothèque, l'erreur a disparu.

Il semble que les actifs ne peuvent pas être importés: Android éléments de la Bibliothèque de dossier n'est pas d'avoir copié

Et voici quelques autres cas: Problème lors de l'utilisation d'une police personnalisée - "natif de caractères ne peut pas être fait"

25voto

Michal Points 448

Je me débattais avec cela beaucoup. J’ai essayé toutes les possibilités, et rien n’y fait. En fin de compte, problème était ailleurs. Si vous générez votre projet avec Gradle, n’oubliez pas d’ajouter ces lignes dans le fichier build.gradle. Cela a résolu le problème dans mon cas.

4voto

Tab Points 58

Dans mon cas, il a été basé sur le nom du fichier de la police. Pour une raison quelconque, il a été nommé FontName... TTF

Je ne sais pas pourquoi les double-points étaient là - j’ai regardé la police originale et ils étaient dans mon dossier windows\fonts comme FontName... TTF. Windows apparemment ne se souciait pas, mais Android flippé. J’ai renommé le fichier, et c’est tous heureux maintenant.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X