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.