Android ตั้งค่าแบบอักษรที่กำหนดเองเป็นสี


92

ฉันต้องการวาดข้อความเป็นสี วิธีการวาดด้วยฟอนต์ที่กำหนดเอง ( เช่น Helvetica ) และตัวหนาด้วย? ฉันอยากจะใช้แบบอักษรของระบบและไม่ได้สร้างจากสินทรัพย์ ขอบคุณ.


"paint": คุณหมายถึงCanvas?
Tony the Pony

ใช่ฉันต้องการสีเพื่อกำหนดสไตล์บางอย่าง ...
Buda Gavril

วิธีตั้งค่าฟอนต์ตามโลแคลเช่นภาษาอังกฤษเราต้องการใช้ arial.ttf และสำหรับเกาหลีฉันต้องการใช้ gothic_B.ttf เป็นไปได้อย่างไรกับการระบายสีบนผืนผ้าใบใน Android
Dwivedi Ji

@DwivediJi: คุณลองโพสต์เป็นคำถาม StackOverflow แทนการแสดงความคิดเห็นในคำถามของคนอื่นหรือไม่?
Michael Scheper

คำตอบ:


167

หากตาม "แบบอักษรที่กำหนดเอง" คุณหมายถึงแบบอักษรที่คุณจัดหาเป็นสินทรัพย์รหัสต่อไปนี้ควรใช้งานได้:

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 แต่ฉันใช้แบบอักษรที่ติดตั้งไว้เพื่อเปรียบเทียบ ถ้าฉันใช้แบบอักษรจากเนื้อหาคุณมีแนวคิดในการตั้งค่าตัวหนาหรือไม่
Buda Gavril

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

2
@ TonythePony รหัสของคุณไม่ได้ผลสำหรับฉัน แบบอักษร fontFace = Typeface.createFromAsset (getAssets (), "แบบอักษร / comic.TTF"); Typeface face = Typeface.create (fontFace, Typeface.BOLD); Paint paint = สีใหม่ (); paint.setTextAlign (PaintAlign.CENTER); paint.setColor (สีขาว); paint.setTextSize (10); paint.setTypeface (ใบหน้า); paint.setFlags (Paint.ANTI_ALIAS_FLAG);
Dwivedi Ji

1
คุณลองgetContext().getAssets()หรือยัง?
Wesley

2
Typeface.DEFAULT_BOLDทำให้ฉันมีปัญหาเช่นกัน แต่เปลี่ยนเป็นใช้Typeface.BOLDงานได้
CrandellWS

31

หากคุณใช้แบบอักษรใหม่ของ Android ใน XML สำหรับแบบอักษรของคุณหากต้องการรับแบบอักษรที่ใช้สำหรับระบายสีคุณสามารถใช้:

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

หรือถ้า min Android API ของคุณ> = 26

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

จากนั้นนำไปใช้กับวัตถุสีของคุณ:

mTextPaint.typeface = customTypeface

ดูข้อมูลเพิ่มเติมได้ที่https://developer.android.com/guide/topics/ui/look-and-feel/fonts-in-xml#fonts-in-code



9

หากคุณมีแบบอักษรที่ใช้อยู่แล้วและต้องการใช้เวอร์ชันตัวหนาคุณสามารถทำได้

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

ฉันใช้คำตอบข้างต้น แต่การปรับเปลี่ยนนี้จำเป็นสำหรับฉัน - แค่คิดว่าฉันจะพูดถึงมัน


1

หากคุณต้องการใช้แบบอักษรจากทรัพยากร (Kotlin):

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

สิ่งนี้อาจไม่เกี่ยวข้องกับคำถาม แต่นี่คือสิ่งที่ฉันกำลังมองหา - อาจมีใครต้องการมันเหมือนกัน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.