2010-07-08 8 views
38

J'ai déjà lu quelques articles et recherché sur Google, mais je n'ai pas réussi à le faire.Polices personnalisées dans Android

Mon problème concerne la police.

Sous Android, il n'y a que 4 attributs dans "android:typeface": Normal, Sans, Serif, Monospace.

Alors, que dois-je faire pour utiliser "Verdana" dans mon application?

S'il vous plaît me suggérer une manière correcte d'utiliser cette police dans mon application Android.

+0

Cochez cette case: [http://stackoverflow.com/questions/2888508/how-to-change-the-font-on-the-text-view-in-android](http://stackoverflow.com/questions/2888508/how-to-change-the-font-on-the-text-view-in-android) – Praveen

+0

Cochez cette case aussi: http://stackoverflow.com/a/14558090/693752 – Snicolas

+0

http://stackoverflow.com/questions/9030204/how-to-use-custom-font-in-android-xml/9035924#9035924 – Vins

Répondre

76

Ceci est un exemple simple ... créez un dossier dans la racine de votre projet appelé assets/fonts/ puis collez le fichier de police TTF (dans ce cas Verdana.ttf). Ensuite, si vous voulez appliquer cette police, disons un TextView, procédez comme suit:

import android.graphics.Typeface; 

public class FontSampler extends Activity { 
    @Override 
    public void onCreate(Bundle icicle) { 
    super.onCreate(icicle); 
    setContentView(R.layout.main); 

    TextView tv=(TextView)findViewById(R.id.custom); 
    Typeface face=Typeface.createFromAsset(getAssets(), 
              "fonts/Verdana.ttf"); 

    tv.setTypeface(face); 
    } 
} 

Cet exemple a été tiré du livre ComonsWare (écrit par Mark Murphy). Vous pouvez download the full example from GitHub.

+6

existe-t-il un moyen de l'appliquer à l'ensemble de l'application de texte plutôt qu'à des vues de texte individuelles? –

+1

Pouvez-vous définir la police pour un contrôle via la mise en page xml? –

+0

Oui et non. Vous ne pouvez pas le faire hors de la boîte ... mais vous pouvez étendre 'TextView' pour ajouter une telle fonctionnalité. – Cristian

4

Vous pouvez utiliser PixlUI à https://github.com/neopixl/PixlUI

importer leurs .jar et de l'utiliser en XML

<com.neopixl.pixlui.components.textview.TextView 
    android:id="@+id/textView1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="@string/hello_world" 
    pixlui:typeface="GearedSlab.ttf" /> 
+0

J'ai essayé votre bibliothèque, mais il semble qu'il n'y ait aucun effet pour android: textStyle = "gras" si je change TextView en pixlui TextView. (v 1.0.5) – mrmoment

0
// My example show you how to change fonts into a normal textView or list view 

create a fonts folder into your assets dir of android and copy your custom font in that .. 
assets/fonts/monaco.ttf 

// Font path 
String fontPath = "fonts/monaco.ttf"; 

// Loading Font Face 
Typeface tf = Typeface.createFromAsset(getAssets(), fontPath); 

// CASE 1 : Inside your list view   
holder.name = (TextView) convertView 
       .findViewById(R.id.textView_cityName); 

// set name of text in each row 
holder.name.setText(CitiesNames.get(position)); 

// set the type of font you want to set 
holder.name.setTypeface(tf); 

// CASE 2 : Inside your text view 

TextView tx = (TextView)findViewById(R.id.textview1); 
tx.setTypeface(tf); 

//vKj 
-1
TextView textView = (Textview) findViewById(R.id.mytext); 
Typeface face=Typeface.createFromAsset(getAssets(), 
             "fonts/Verdana.ttf"); 
textView.setTypeFace(face); 
+0

Pourquoi avez-vous répété le code/réponse à nouveau? –

2

Vous pouvez utiliser simple bibliothèque tiers EasyFonts pour définir la variété de police personnalisée à votre TextView. En utilisant cette bibliothèque, vous ne devriez pas avoir à vous soucier de télécharger et d'ajouter des polices dans le dossier assets/fonts. Aussi à propos de la création d'objets typographiques.

Cette bibliothèque ne fournit pas de police Verdana.

Mais fournissez les polices suivantes. Lequel pourriez-vous utiliser?

  • Roboto
  • Droid Serif
  • Droid Robot
  • Freedom
  • Fun Raiser
  • Android Nation
  • vert avocat
  • reconnaissance

simplement:

TextView myTextView = (TextView)findViewById(R.id.myTextView); 
myTextView.setTypeface(EasyFonts.robotoThin(this)); 

Je suis auteur de cette bibliothèque.

3

Bien !!
Cette question est assez vieux mais si quelqu'un est à la recherche de la réponse (en 2015) sur la façon d'appliquer la police personnalisée à tous les Textviews par le code xml voir directement ci-dessous:

Première:
nous devons ajouter police personnalisée dossier actif à l'intérieur dans votre répertoire app:
.ttf ou .otf travaillent tous les deux dans le cas d'Android

Deuxième:
Créer une classe CustomTextView qui s'étend TextView comme ci-dessous:

public class CustomTextView extends TextView { 

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

public CustomTextView(Context context, AttributeSet attrs, int defStyleAttr) { 
    super(context, attrs, defStyleAttr); 
    } 

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

@Override 
public void setTypeface(Typeface tf) { 
    super.setTypeface(FontCache.getFont(getContext(),"fonts/<font_name>")); 
    } 
} 

Troisième:
classe fontcache utilisé à l'intérieur de setTypeface de CustomTextView() method.Purpose est de faire Caching police de base en utilisant HashMap:

public class FontCache { 

private static Map<String,Typeface> fontMap = new HashMap<String,Typeface>(); 

public static Typeface getFont(Context context,String fontname){ 
    if(fontMap.containsKey(fontname)){ 
     return fontMap.get(fontname); 
     } 
    else{ 
     Typeface tf = Typeface.createFromAsset(context.getAssets(),fontname); 
     fontMap.put(fontname,tf); 
     return tf; 
     } 
    } 
} 

Quatrième: [Dernière étape] Tout ce que nous faisons maintenant est d'utiliser le CustomTextView directement dans notre fichier xml partout où le texte personnalisé est requis:

<<package_name>.CustomTextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Custom Font Text" 
    android:textSize ="18sp" 
    android:textAppearance="?android:textAppearanceSmall" 
    android:id="@+id/custom_txt" 
    /> 

Désolé, si ceci a déjà été posté quelque part sur SO. Juste pensé à partager si ça aide quelqu'un !!

1

Pour changer le (personnalisé) police de votre application à l'échelle mondiale, jetez un oeil à Calligraphy

Ajoutez simplement Calligraphie à votre gradle.build et ajoutez l'extrait suivant à votre Application.onCreate():

CalligraphyConfig.initDefault(new CalligraphyConfig.Builder() 
         .setDefaultFontPath("fonts/MyCustomFont.ttf") 
         .setFontAttrId(R.attr.fontPath) 
         .build() 
     ); 

et dans toutes les activités ajouter ce qui suit:

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

C'est tout ce que vous devez faire pour changer la police dans le monde dans votre application. Jetez un oeil à la docs pour plus de détails.

Questions connexes