Android将自定义字体设置为绘画


91

我想在油漆上画文字。如何使用自定义字体(例如Helvetica)和粗体绘制它?我倾向于使用系统字体,而不是从资产创建它。谢谢。


《油漆》:你的意思是Canvas

是的,我需要设置一些样式的颜料...
Buda Gavril

如何根据语言环境设置字体,例如对于英语,我们要使用arial.ttf,对于朝鲜语,我要使用gothic_B.ttf。它如何在Android的画布上用颜料绘画
-Dwivedi Ji

@DwivediJi:您是否尝试过将其发布为StackOverflow问题,而不是对其他人的问题发表评论?
2014年

Answers:


164

如果“自定义字体”是指您要作为资产提供的字体,则以下代码应该起作用:

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,但我使用了一些已安装的字体进行比较。如果我使用素材资源中的字体,您是否知道如何设置粗体?
布达·加夫里尔

6
试试:Typeface plain = Typeface.createFromAsset(assetManager, pathToFont); Typeface bold = Typeface.create(plain, Typeface.DEFAULT_BOLD)

2
@TonythePony您的代码对我不起作用。字体fontFace = Typeface.createFromAsset(getAssets(),“ fonts / comic.TTF”); 字体face = Typeface.create(fontFace,Typeface.BOLD); Paint paint = new Paint(); paint.setTextAlign(Paint.Align.CENTER); paint.setColor(Color.WHITE); paint.setTextSize(10); paint.setTypeface(face); paint.setFlags(Paint.ANTI_ALIAS_FLAG);
Dwivedi Ji 2012年

1
你尝试了getContext().getAssets()吗?
韦斯利

2
Typeface.DEFAULT_BOLD也给了我一些问题,但转为Typeface.BOLD工作
CrandellWS 2016年

26

如果您使用的是Android的XML新字体作为字体,那么要获得用于绘画的字体,可以使用:

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

或者您的最小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


16

将此用于油漆课:

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

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)

这可能与问题无关,但这是我一直在寻找的东西-也许有人也会需要它。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.