web-dev-qa-db-fra.com

Comment ajouter des polices externes à Android application

Je recherchais des polices élégantes pour mon Android.), Mais le problème est de savoir comment rendre mon application Android compatible avec les polices externes.

Merci.

71
bHaRaTh

Vous devez créer un dossier de polices sous le dossier assets de votre projet et y placer votre TTF. Puis dans votre activité onCreate ()

TextView myTextView=(TextView)findViewById(R.id.textBox);
Typeface typeFace=Typeface.createFromAsset(getAssets(),"fonts/mytruetypefont.ttf");
myTextView.setTypeface(typeFace);

Veuillez noter que tous les TTF ne fonctionneront pas. Pendant que j'essayais, cela ne fonctionnait que pour un sous-ensemble (sous Windows, ceux dont le nom est écrit en minuscules).

147
Zelimir

Vous pouvez utiliser le TextView personnalisé pour toute l'application avec une police personnalisée en voici un exemple.

public class MyTextView extends TextView {

   Typeface normalTypeface = Typeface.createFromAsset(getContext().getAssets(), Constants.FONT_REGULAR);
   Typeface boldTypeface = Typeface.createFromAsset(getContext().getAssets(),  Constants.FONT_BOLD);

   public MyTextView(Context context, AttributeSet attrs, int defStyle) {
       super(context, attrs, defStyle);
   }

   public MyTextView(Context context, AttributeSet attrs) {
       super(context, attrs);
   }

   public MyTextView(Context context) {
       super(context);
   }

   public void setTypeface(Typeface tf, int style) {
       if (style == Typeface.BOLD) {
           super.setTypeface(boldTypeface/*, -1*/);
       } else {
           super.setTypeface(normalTypeface/*, -1*/);
       }
   }
}
12
Jabbir Basha

Créez un dossier nommé polices dans le dossier des ressources et ajoutez l'extrait de code à partir du lien ci-dessous.

Typeface tf = Typeface.createFromAsset(getApplicationContext().getAssets(),"fonts/fontname.ttf");
textview.setTypeface(tf);
9
Jana

Pour mettre en œuvre, vous devez utiliser Typeface avec l'exemple ci-dessous

Typeface typeface = Typeface.createFromAsset(getAssets(), "fonts/Roboto/Roboto-Regular.ttf");
for (View view : allViews)
{
   if (view instanceof TextView) 
   {
      TextView textView = (TextView) view;
      textView.setTypeface(typeface);
      }
   }
}
7
Jabbir Basha

Pour ce faire, le moyen le plus simple consiste à conditionner la ou les polices souhaitées avec votre application. Pour ce faire, créez simplement un actif/dossier à la racine du projet et placez vos polices (sous forme TrueType ou TTF) dans les actifs. Vous pouvez, par exemple, créer des ressources/des polices/et y placer vos fichiers TTF.

Ensuite, vous devez indiquer à vos widgets d'utiliser cette police. Malheureusement, vous ne pouvez plus utiliser de mise en page XML pour cela, car le XML ne connaît aucune police que vous pourriez avoir cachée en tant qu'actif d'application. Au lieu de cela, vous devez effectuer la modification dans le code Java) en appelant Typeface.createFromAsset (getAssets (), “fonts/HandmadeTypewriter.ttf”), puis en le transmettant à votre TextView via setTypeface ().

Pour plus de référence, voici le tutoriel où j'ai obtenu ceci:

http://www.androidguys.com/2008/08/18/fun-with-fonts/

5
bHaRaTh

Je recommande ceci approche c'est très gentil avec l'ajout du nom de la police personnalisée dans typeface à styles.xml et en plaçant votre jeu de polices dans le dossier assets.

2
ar-g

n point de plus en plus des réponses ci-dessus. Lors de l'utilisation d'une police dans un fragment, l'instanciation de la police doit être effectuée dans la méthode onAttach (override) comme indiqué ci-dessous:

@Override
public void onAttach(Activity activity){
    super.onAttach(activity);
    Typeface tf = Typeface.createFromAsset(getApplicationContext().getAssets(),"fonts/fontname.ttf");
}

Raison:
Un fragment est rapidement lié à une activité. Si la méthode CreateFromAsset est appelée avant l'attachement de fragment à une activité, une erreur se produit.

2
Akil Adeshwar