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.

Buda Gavril
quelle
"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);
Tony das Pony
quelle
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

Sebastian Helzer
quelle
16

Verwenden Sie dies für die Farbklasse:

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

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

Paweł Rubin
quelle