Android ustawił niestandardową czcionkę na farbę

92

Chcę narysować tekst na farbie. Jak narysować go niestandardową czcionką ( ex Helvetica ) i pogrubioną? Wolałbym używać czcionki systemowej i nie tworzyć jej z zasobów. Dzięki.

Buda Gavril
źródło
„farba”: Masz na myśli Canvas?
Tony the Pony
tak, potrzebuję farby, aby ustawić kilka stylów ...
Buda Gavril
Jak ustawić czcionkę zgodnie z lokalizacją, na przykład dla angielskiego chcemy użyć arial.ttf, a dla koreańskiego chcę użyć gothic_B.ttf. Jak to możliwe z farbą na płótnie w
Androidzie
@DwivediJi: Czy próbowałeś opublikować to jako pytanie StackOverflow, zamiast komentarza do pytania kogoś innego?
Michael Scheper,

Odpowiedzi:

167

Jeśli przez „czcionkę niestandardową” masz na myśli czcionkę dostarczaną jako zasób, następujący kod powinien działać:

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 the Pony
źródło
Helvetica nie jest zainstalowana, ale do porównania użyłem kilku zainstalowanych czcionek. Jeśli używam czcionki z zasobów, czy masz pomysł, jak ustawić pogrubienie?
Buda Gavril
6
Spróbuj: Typeface plain = Typeface.createFromAsset(assetManager, pathToFont); Typeface bold = Typeface.create(plain, Typeface.DEFAULT_BOLD).
Tony the Pony
2
@TonythePony Twój kod nie działa dla mnie. Typeface fontFace = Typeface.createFromAsset (getAssets (), "fonts / comic.TTF"); Typeface face = Typeface.create (fontFace, Typeface.BOLD); Maluj farbę = nowa farba (); paint.setTextAlign (Paint.Align.CENTER); paint.setColor (Color.WHITE); paint.setTextSize (10); paint.setTypeface (face); paint.setFlags (Paint.ANTI_ALIAS_FLAG);
Dwivedi Ji
1
Próbowałeś getContext().getAssets()?
Wesley,
2
Typeface.DEFAULT_BOLDdało mi również problemy, ale zmiana na Typeface.BOLDdziałała
CrandellWS
31

Jeśli używasz nowych czcionek Androida w formacie XML dla swoich czcionek, aby uzyskać krój czcionki używany do malowania, możesz użyć:

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

lub jeśli Twój minimalny interfejs API systemu Android> = 26

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

Następnie, aby zastosować go do malowanego obiektu:

mTextPaint.typeface = customTypeface

Aby uzyskać więcej informacji, odwiedź https://developer.android.com/guide/topics/ui/look-and-feel/fonts-in-xml#fonts-in-code

Sebastian Helzer
źródło
17

Użyj tego dla klasy farby:

 Paint paint = new Paint();
   paint.setTypeface(Typeface.create("Arial",Typeface.ITALIC));
Pritam
źródło
9

Jeśli masz już używaną czcionkę i chcesz użyć jej pogrubionej wersji, możesz to zrobić.

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

Skorzystałem z powyższej odpowiedzi, ale ta modyfikacja była dla mnie konieczna - więc pomyślałem, że o tym wspomnę

Neil D'Souza
źródło
1

Jeśli chcesz użyć czcionki z zasobów (Kotlin):

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

Może nie ma to związku z pytaniem, ale właśnie tego szukałem - może ktoś też by tego potrzebował.

Paweł Rubin
źródło