2016-10-26 1 views
1

J'ai écrit ce code:polices personnalisées dans les applications ne fonctionnent pas

Typeface tf = Typeface.createFromAsset(getAssets(), "lato.woff2"); 
TextView tv = (TextView) findViewById(R.id.myTextView); 
tv.setTypeface(tf); 

Mais il se bloque parce que:

"Caused by: java.lang.RuntimeException: Font asset not found lato.woff2" 

Je mets le fichier de police, lato.woff2, dans ces dossiers:

src/main/assets/font/ 
src/main/assets/ 

Alors, qu'est-ce que je fais mal?

+3

support android seulement fichier .ttf pour la famille de polices et mettre votre fichier .ttf dans le dossier des actifs seulement –

+0

Andoid ne supporte que le format TTF (ou) OTF –

+0

@NiteshPareek Terminé, mais maintenant je reçois cette erreur: Tenter d'invoquer la méthode virtuelle 'void android.widget.TextView.setTypeface (android.graphics .Typeface) 'sur une référence d'objet nul – xRobot

Répondre

0

getAssets() de getApplicationContext().

Typeface tf = Typeface.createFromAsset(getApplicationContext().getAssets(), "lato.woff2"); 
0

Si vous ajoutez votre fichier de police en chemin de assests:

Typeface mTypeface == Typeface.createFromAsset(getApplicationContext().getAssets(), "lato.woff2"); 

si vous ajoutez votre police sous assests/polices/chemin du dossier:

Typeface mTypeface == Typeface.createFromAsset(getApplicationContext().getAssets(), "fonts/lato.woff2"); 
0

Vous êtes en mesure de ne pas réinventer la roue, si vous souhaitez utiliser la bibliothèque Calligraphy. Tout ce que vous devez faire est de remplacer la méthode onCreate() dans votre classe d'application comme ceci:

CalligraphyConfig.initDefault(new CalligraphyConfig.Builder() 
          .setDefaultFontPath("fonts/Roboto-RobotoRegular.ttf") 
          .setFontAttrId(R.attr.fontPath) 
          .build() 

Et puis injecter dans le contexte (il fonctionnera pour l'application entière, si vous déclarez dans la BaseActivity de votre application):

@Override 
protected void attachBaseContext(Context newBase) { 
    super.attachBaseContext(CalligraphyContextWrapper.wrap(newBase)); 
} 

maintenant, vous pouvez utiliser des polices personnalisées dans vos éléments d'interface utilisateur comme ceci:

<TextView 
    android:text="@string/hello_world" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    fontPath="fonts/Roboto-Bold.ttf"/> 

ne pas oublier de spécifier la classe d'application dans votre manifeste. Bonne chance!

0

Si vous avez les fichiers TFF dans/src/main/assets/polices, vous pouvez également créer un TextView personnalisé en remplaçant le constructeur:

import android.content.Context; 
import android.graphics.Typeface; 
import android.util.AttributeSet; 
import android.widget.TextView; 


public class OpenSansTextView extends TextView { 
    public OpenSansTextView(Context context, AttributeSet attributeSet){ 
     super(context, attributeSet); 
     this.setTypeface(Typeface.createFromAsset(context.getAssets(), "fonts/OpenSans-Regular.ttf")); 
    } 
} 

puis dans votre mise en page xml utilisation:

<YOUR-PACKAGE-NAME.OpenSansTextView 
      android:id="@+id/some_id" 
      android:text="@string/my_string" 
      android:textSize="16sp" />