Android ha impostato il carattere personalizzato su una vernice


91

Voglio disegnare un testo su una pittura. Come disegnarlo con un carattere personalizzato ( ex Helvetica ) e anche in grassetto? Preferirei utilizzare un carattere di sistema e non crearlo da risorse. Grazie.


"vernice": intendi Canvas?
Tony the Pony

sì, mi serve la vernice per impostare alcuni stili ...
Buda Gavril

Come impostare il font in base alle impostazioni locali, ad esempio per l'inglese vogliamo usare arial.ttf e per il coreano voglio usare gothic_B.ttf. Com'è possibile con la pittura su tela in Android
Dwivedi Ji

@DwivediJi: hai provato a pubblicarla come domanda StackOverflow, invece di commentare la domanda di qualcun altro?
Michael Scheper

Risposte:


164

Se per "carattere personalizzato" intendi un carattere che stai fornendo come risorsa, il seguente codice dovrebbe funzionare:

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 non è installato, ma ho usato alcuni caratteri installati per confrontare. Se sto usando un carattere da risorse, hai idea di come impostare il grassetto?
Buda Gavril

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

2
@TonythePony il tuo codice non funziona per me. Typeface fontFace = Typeface.createFromAsset (getAssets (), "fonts / comic.TTF"); Typeface face = Typeface.create (fontFace, Typeface.BOLD); Paint paint = nuovo Paint (); paint.setTextAlign (Paint.Align.CENTER); paint.setColor (Color.WHITE); paint.setTextSize (10); paint.setTypeface (face); paint.setFlags (Paint.ANTI_ALIAS_FLAG);
Dwivedi Ji

1
Hai provato getContext().getAssets()?
Wesley

2
Typeface.DEFAULT_BOLDmi ha dato anche problemi, ma è passato a Typeface.BOLDfunzionato
CrandellWS

26

Se stai utilizzando i nuovi caratteri di Android in XML per i tuoi caratteri, per ottenere il carattere tipografico utilizzato per la pittura puoi utilizzare:

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

o se la tua API Android minima> = 26

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

Quindi per applicarlo al tuo oggetto di pittura:

mTextPaint.typeface = customTypeface

Per maggiori informazioni visita https://developer.android.com/guide/topics/ui/look-and-feel/fonts-in-xml#fonts-in-code


16

Usa questo per la classe di pittura:

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

9

Se hai già un font in uso e desideri utilizzarne una versione in grassetto, puoi farlo.

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

Ho usato la risposta sopra, ma questa modifica era necessaria per me, quindi ho pensato di menzionarla


1

Se vuoi usare un font dalle risorse (Kotlin):

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

Questo potrebbe non essere correlato alla domanda, ma questo è quello che stavo cercando - forse anche qualcuno ne avrebbe avuto bisogno.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.