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.


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

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


17

Użyj tego dla klasy farby:

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

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ę


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ł.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.