【问题标题】:Custom fonts in androidandroid中的自定义字体
【发布时间】:2011-04-12 15:16:23
【问题描述】:

我正在尝试在文本视图中使用自定义字体:

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

什么问题?

【问题讨论】:

标签: java android


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

        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(this.getAssets(), "fonts/font.ttf");为我工作
        【解决方案5】:

        这可能是问题

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

        【讨论】:

          【解决方案6】:
          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();
          
          }
          
          }
          

          【讨论】:

            猜你喜欢
            • 2015-12-29
            • 2015-06-08
            • 2014-08-18
            • 2015-08-13
            • 2011-06-02
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多