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.

Buda Gavril
la source
"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);
Tony le poney
la source
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

Sebastian Helzer
la source
16

Utilisez ceci pour la classe de peinture:

 Paint paint = new Paint();
   paint.setTypeface(Typeface.create("Arial",Typeface.ITALIC));
Pritam
la source
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

Neil D'Souza
la source
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.

Paweł Rubin
la source