安卓中的自定义字体

3

我正在尝试在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

有什么问题?


3
可能是重复问题:https://dev59.com/AHA75IYBdhLWcg3wm6Yj#3203724(注:翻译者已根据要求尽力压缩语言并保留原意,如果有误请指出) - Praveen
@Paresh:任何资源(R.id.foo) - Kunal P.Bharati
@Praveen:我猜是同样的代码。但我仍然遇到了这个运行时异常。 - Kunal P.Bharati
6个回答

11

对我来说,当找不到字体文件时,我确实收到了这个消息。就像这样简单:

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

当我的字体实际上在font/MYFONT.TTF中时


3

首先检查字体的名称和扩展名。它是大小写敏感的,可能全部为大写字母。例如:

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

2

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

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

我遇到了“无法创建本地字体类型”错误。

我尝试从头开始创建一个新的测试项目,仅仅是为了显示“Hello World”,并使用我想要使用的自定义字体。因此,在默认活动类的onCreate()方法中,我进行了以下操作:

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

这一次,我尝试将主Activity的引用放到我的自定义布局类中,而不是上下文,结果成功了。我认为这个方法值得一试:

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

现在这个时候它已经在自定义布局类上起作用了。希望这对你们也有所帮助。


字体类型 font = Typeface.createFromAsset(this.getAssets(), "fonts/font.ttf"); 对我有效。 - Nitesh Khosla

2
我猜测字体本身存在问题。当操作系统的本地代码尝试加载字体时,会触发该错误。如果文件丢失,则会出现不同的消息,因此我认为它找到了文件,但由于某种原因不喜欢它。

0

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

}

}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接