web-dev-qa-db-fra.com

Polices personnalisées en Android

J'ai déjà lu quelques articles et recherché sur Google, mais je ne l'ai pas fait.

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?

Veuillez me suggérer une manière correcte d'utiliser cette police dans mon Android.

39
Paresh Mayani

Ceci est un exemple simple ... créez un dossier à la racine de votre projet appelé assets/fonts/ puis collez le fichier de police TTF (dans ce cas Verdana.ttf). Ensuite, si vous souhaitez appliquer cette police, par exemple 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 est tiré du livre ComonsWare (écrit par Mark Murphy). Vous pouvez télécharger l'exemple complet depuis GitHub .

77
Cristian

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

importer leur .jar et 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" />
4
guest2343sdfdfs

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

Premier:
nous devons ajouter une police personnalisée dans le dossier des ressources dans le répertoire de votre application:
. ttf ou . otf fonctionnent tous les deux dans le cas d'Android

Deuxième:
Créez la classe CustomTextView qui é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ée dans la méthode setTypeface () de CustomTextView. Le but est de faire une mise en cache de police de base à l'aide de 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: [Étape finale] Tout ce que nous faisons maintenant est d'utiliser le CustomTextView directement à l'intérieur de notre fichier xml partout où une police de texte personnalisée est requise:

<<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 cela a déjà été publié quelque part sur SO. J'ai juste pensé à partager si ça aide quelqu'un !!

3
PunitD

Vous pouvez utiliser simple EasyFonts bibliothèque tierce pour définir une variété de polices personnalisées sur votre TextView. En utilisant cette bibliothèque, vous ne devriez pas avoir à vous soucier du téléchargement et de l'ajout de polices dans le dossier assets/fonts. Également à propos de la création d'objets Typeface.

Cette bibliothèque ne fournit pas de visage de police Verdana.

Mais fournissez les faces de police suivantes. Que souhaiteriez-vous utiliser?.

  • Roboto
  • Droid Serif
  • Robot Droid
  • Liberté
  • Fun Raiser
  • Android Nation
  • Avocat vert
  • Reconnaissance

Simplement:

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

Je suis l'auteur de cette bibliothèque.

2
Vijay Vankhede

Pour changer la police (personnalisée) de votre application globalement, jetez un œil à Calligraphy

Ajoutez simplement la 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 chaque activité, ajoutez 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 de manière globale dans votre application. Jetez un œil aux documents pour plus de détails.

1
Stefan Medack
// 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
0
Vinod Joshi