Android benutzerdefinierte Schriftart auf eine Farbe setzen


91

Ich möchte einen Text auf eine Farbe zeichnen. Wie zeichnet man es mit einer benutzerdefinierten Schriftart ( ex Helvetica ) und auch fett? Ich würde es vorziehen, eine Systemschriftart zu verwenden und sie nicht aus Assets zu erstellen. Vielen Dank.


"Farbe": Meinst du Canvas?
— Tony das Pony

Ja, ich brauche die Farbe, um einige Stile festzulegen ...
— Buda Gavril

Wie man die Schriftart nach Gebietsschema einstellt, zum Beispiel für Englisch wollen wir arial.ttf verwenden und für Koreanisch möchte ich gothic_B.ttf verwenden. Wie es mit Farbe auf Leinwand in Android möglich ist
— Dwivedi Ji

@ DwivediJi: Haben Sie versucht, dies als StackOverflow-Frage zu veröffentlichen, anstatt einen Kommentar zur Frage eines anderen zu verfassen?
— Michael Scheper

Antworten:


164

Wenn mit "benutzerdefinierte Schriftart" eine Schriftart gemeint ist, die Sie als Asset bereitstellen, sollte der folgende Code funktionieren:

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 ist nicht installiert, aber ich habe einige installierte Schriftarten zum Vergleichen verwendet. Haben Sie eine Idee, wie Sie Fettdruck festlegen können, wenn ich eine Schriftart aus Assets verwende?
— Buda Gavril

6
Versuchen Sie : Typeface plain = Typeface.createFromAsset(assetManager, pathToFont); Typeface bold = Typeface.create(plain, Typeface.DEFAULT_BOLD).
— Tony das Pony

2
@ TonythePony Ihr Code funktioniert nicht für mich. Schriftart fontFace = Typeface.createFromAsset (getAssets (), "fonts / comic.TTF"); Typeface face = Typeface.create (fontFace, Typeface.BOLD); Farbe malen = neue Farbe (); paint.setTextAlign (Paint.Align.CENTER); paint.setColor (Color.WHITE); paint.setTextSize (10); paint.setTypeface (Gesicht); paint.setFlags (Paint.ANTI_ALIAS_FLAG);
— Dwivedi Ji

1
Hast du es versucht getContext().getAssets()?
— Wesley

2
Typeface.DEFAULT_BOLDgab mir auch Probleme, wechselte aber zu Typeface.BOLDfunktioniert
— CrandellWS

25

Wenn Sie die neuen Schriftarten von Android in XML für Ihre Schriftarten verwenden, können Sie Folgendes verwenden, um die für das Malen verwendete Schriftart zu erhalten:

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

oder wenn Ihre min Android API> = 26

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

Dann wenden Sie es auf Ihr Farbobjekt an:

mTextPaint.typeface = customTypeface

Weitere Informationen finden Sie unter https://developer.android.com/guide/topics/ui/look-and-feel/fonts-in-xml#fonts-in-code


16

Verwenden Sie dies für die Farbklasse:

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

9

Wenn Sie bereits eine Schriftart verwenden und eine fette Version davon verwenden möchten, können Sie dies tun.

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);

Ich habe die obige Antwort verwendet, aber diese Änderung war für mich notwendig - also dachte ich nur, ich würde sie erwähnen


1

Wenn Sie eine Schriftart aus Ressourcen (Kotlin) verwenden möchten:

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

Dies hängt vielleicht nicht mit der Frage zusammen, aber das ist es, wonach ich gesucht habe - vielleicht würde es auch jemand brauchen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.