android définir une police personnalisée sur une peinture


91

Je veux dessiner un texte sur une peinture. Comment le dessiner avec une police personnalisée ( ex Helvetica ) et en gras également? Je préférerais utiliser une police système et ne pas la créer à partir d'actifs. Merci.


"peindre": Voulez-vous dire Canvas?
Tony the Pony

oui, j'ai besoin de la peinture pour définir certains styles ...
Buda Gavril

Comment définir la police en fonction des paramètres régionaux, par exemple pour l'anglais, nous voulons utiliser arial.ttf et pour le coréen, je veux utiliser gothic_B.ttf. Comment c'est possible avec de la peinture sur toile dans Android
Dwivedi Ji

@DwivediJi: Avez-vous essayé de publier cela comme une question StackOverflow, au lieu d'un commentaire sur la question de quelqu'un d'autre?
Michael Scheper

Réponses:


164

Si par "police personnalisée" vous entendez une police que vous fournissez en tant qu'actif, le code suivant devrait fonctionner:

Typeface plain = Typeface.createFromAsset(assetManager, pathToFont); 
Typeface bold = Typeface.create(plain, Typeface.DEFAULT_BOLD)
Paint paint = new Paint();
paint.setTypeface(bold);
canvas.drawText("Sample text in bold",0,0,paint);

Helvetica n'est pas installé, mais j'ai utilisé certaines polices installées pour comparer. Si j'utilise une police à partir d'actifs, avez-vous une idée de la façon de mettre en gras?
Buda Gavril

6
Essayez: Typeface plain = Typeface.createFromAsset(assetManager, pathToFont); Typeface bold = Typeface.create(plain, Typeface.DEFAULT_BOLD).
Tony the Pony

2
@TonythePony votre code ne fonctionne pas pour moi. Typeface fontFace = Typeface.createFromAsset (getAssets (), "fonts / comic.TTF"); Typeface face = Typeface.create (fontFace, Typeface.BOLD); Paint paint = nouveau Paint (); paint.setTextAlign (Paint.Align.CENTER); paint.setColor (Color.WHITE); paint.setTextSize (10); paint.setTypeface (visage); paint.setFlags (Paint.ANTI_ALIAS_FLAG);
Dwivedi Ji

1
Avez-vous essayé getContext().getAssets()?
Wesley

2
Typeface.DEFAULT_BOLDm'a également posé des problèmes, mais je suis passé au Typeface.BOLDtravail
CrandellWS

26

Si vous utilisez les nouvelles polices d'Android en XML pour vos polices, vous pouvez utiliser pour obtenir la police utilisée pour la peinture:

val customTypeface = ResourcesCompat.getFont(context, R.font.myfont)

ou si votre API Android minimale> = 26

val customTypeface = resources.getFont(R.font.myfont)

Ensuite, pour l'appliquer sur votre objet peinture:

mTextPaint.typeface = customTypeface

Pour plus d'informations, consultez https://developer.android.com/guide/topics/ui/look-and-feel/fonts-in-xml#fonts-in-code


16

Utilisez ceci pour la classe de peinture:

 Paint paint = new Paint();
   paint.setTypeface(Typeface.create("Arial",Typeface.ITALIC));

9

Si vous avez déjà une police en cours d'utilisation et que vous souhaitez en utiliser une version en gras, vous pouvez le faire.

currentPainter = new Paint(Paint.ANTI_ALIAS_FLAG);
currentPainter.setColor(Color.WHITE);
currentPainter.setTextSize(Utils.sp2px(getResources(), 14)); // set font size
Typeface currentTypeFace =   currentPainter.getTypeface();
Typeface bold = Typeface.create(currentTypeFace, Typeface.BOLD);
currentPainter.setTypeface(bold);

J'ai utilisé la réponse ci-dessus, mais cette modification était nécessaire pour moi - alors j'ai simplement pensé que je la mentionnerais


1

Si vous souhaitez utiliser une police à partir de ressources (Kotlin):

val textPaint = TextPaint()
textPaint.typeface = resources.getFont(R.font.font_name)

Cela n'est peut-être pas lié à la question, mais c'est ce que je cherchais - peut-être que quelqu'un en aurait besoin aussi.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.