android中的自定义字体

我想在textview中使用自定义字体:

tv=(TextView)findViewById(res); Typeface font = Typeface.createFromAsset(this.getAssets(), "fonts/font.ttf"); tv.setTypeface(font); 

但是当我运行时,我收到以下错误:

 W/System.err( 542): java.lang.RuntimeException: native typeface cannot be made 

问题是什么?

对我来说,这肯定是我找不到字体文件时收到的消息。 简单的事情:

 Typeface.createFromAsset(getContext().getAssets(), "fonts/MYFONT.TTF"); 

当我的字体实际上是font / MYFONT.TTF

首先检查字体的名称和扩展名。 它区分大小写并且可能全部大写。 例如。

 Typeface tf = Typeface.createFromAsset(getAssets(), "fonts/ABADDON.TTF") 

我猜这个字体本身有问题。 当操作系统中的本机代码尝试加载字体时,将触发该错误。 我似乎记得,如果文件丢失,会有一个不同的消息,所以我认为它是找到文件但不喜欢它的原因。

我遇到了这个问题,我在自定义布局类中设置了字体,其构造函数传递了对父活动的“上下文”的引用,并将其设置为:

 Typeface font = Typeface.createFromAsset(this.getAssets(), "fonts/font.ttf"); 

它给了我“原生字体无法制作”的错误。

继续从头开始创建一个新的测试项目,只显示我想要使用的自定义字体“Hello World”,所以我在默认活动类的onCreate()上做了这个:

 Typeface font = Typeface.createFromAsset(getAssets(), "fonts/font.ttf"); 

这次它工作,我想也许我应该尝试将主Activity而不是Context的引用添加到我的自定义布局类:

 Typeface font = Typeface.createFromAsset(activity.getAssets(), "fonts/font.ttf"); 

现在这次它适用于自定义布局类。 希望这对你们也有帮助。

这可能是个问题

Typeface.createFromAsset泄漏资产流: http : //code.google.com/p/android/issues/detail? id = 9994

 public class Harshida extends View { Bitmap gBall; float changingY; Typeface font; public Harshida(Context context) { super(context); // TODO Auto-generated constructor stub gBall=BitmapFactory.decodeResource(getResources(), R.drawable.greenball); changingY=0; font=Typeface.createFromAsset(context.getAssets(), "assets/G-Unit.TTF"); } @Override protected void onDraw(Canvas canvas) { // TODO Auto-generated method stub super.onDraw(canvas); canvas.drawColor(Color.WHITE); Paint textPaint=new Paint(); textPaint.setARGB(50,254,10,50); textPaint.setTextAlign(Align.CENTER); textPaint.setTextSize(50); textPaint.setTypeface(font); canvas.drawText("HarshidaParmar",canvas.getWidth()/2,200,textPaint); //canvas.drawBitmap(gBall,(canvas.getWidth()/2),0,null); canvas.drawBitmap(gBall,(canvas.getWidth()/2),changingY,null); if(changingY < canvas.getHeight()){ changingY +=10; }else { changingY=0; } Rect middleRect= new Rect(); middleRect.set(0, 40, canvas.getWidth(),400); //middleRect.set(0,0,0,0); Paint ourBlue = new Paint(); ourBlue.setColor(Color.BLUE); canvas.drawRect(middleRect, ourBlue); //canvas.drawRect(middleRect,ourBlue); invalidate(); } }