android mengatur font khusus menjadi cat

92

Saya ingin menggambar teks ke cat. Bagaimana cara menggambarnya dengan font khusus ( ex Helvetica ) dan juga tebal? Saya lebih suka menggunakan font sistem dan bukan membuatnya dari aset. Terima kasih.

Buda Gavril
sumber
"cat": Maksud Anda Canvas?
Tony the Pony
ya, saya perlu cat untuk mengatur beberapa gaya ...
Buda Gavril
Cara setting font sesuai locale, misalnya untuk bahasa inggris kita ingin menggunakan arial.ttf dan untuk korea saya ingin menggunakan gothic_B.ttf. Bagaimana mungkin dengan cat di atas kanvas di android
Dwivedi Ji
@DwivediJi: Sudahkah Anda mencoba mempostingnya sebagai pertanyaan StackOverflow, daripada mengomentari pertanyaan orang lain?
Michael Scheper

Jawaban:

167

Jika yang Anda maksud dengan "font khusus" adalah font yang Anda berikan sebagai aset, kode berikut harus berfungsi:

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
sumber
Helvetica belum diinstal, tetapi saya telah menggunakan beberapa font yang diinstal untuk membandingkan. Jika saya menggunakan font dari aset, apakah Anda tahu cara menetapkan tebal?
Buda Gavril
6
Cobalah: Typeface plain = Typeface.createFromAsset(assetManager, pathToFont); Typeface bold = Typeface.create(plain, Typeface.DEFAULT_BOLD).
Tony the Pony
2
@TonythePony kode Anda tidak berfungsi untuk saya. Jenis huruf fontFace = Jenis huruf.createFromAsset (getAssets (), "font / comic.TTF"); Typeface face = Typeface.create (fontFace, Typeface.BOLD); Cat cat = Cat baru (); paint.setTextAlign (Paint.Align.CENTER); paint.setColor (Color.WHITE); paint.setTextSize (10); paint.setTypeface (wajah); paint.setFlags (Paint.ANTI_ALIAS_FLAG);
Dwivedi Ji
1
Apakah kamu sudah mencobanya getContext().getAssets()?
Wesley
2
Typeface.DEFAULT_BOLDmemberi saya masalah juga tetapi beralih ke Typeface.BOLDbekerja
CrandellWS
29

Jika Anda menggunakan Font baru Android dalam XML untuk font Anda, maka untuk mendapatkan jenis huruf yang digunakan untuk paint, Anda dapat menggunakan:

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

atau jika API Android min Anda> = 26

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

Kemudian untuk menerapkannya ke objek cat Anda:

mTextPaint.typeface = customTypeface

Untuk info lebih lanjut, lihat https://developer.android.com/guide/topics/ui/look-and-feel/fonts-in-xml#fonts-in-code

Sebastian Helzer
sumber
17

Gunakan ini untuk kelas cat:

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

Jika Anda sudah memiliki font yang sedang digunakan dan ingin menggunakan versi yang tebal, Anda dapat melakukannya.

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

Saya menggunakan jawaban di atas, tetapi modifikasi ini perlu bagi saya - jadi saya pikir saya akan menyebutkannya

Neil D'Souza
sumber
1

Jika Anda ingin menggunakan font dari resource (Kotlin):

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

Ini mungkin tidak terkait dengan pertanyaan, tetapi inilah yang saya cari - mungkin seseorang juga membutuhkannya.

Paweł Rubin
sumber