自定义字体无法在Android上运行

时间:2012-11-08 11:28:14

标签: android fonts drawing android-canvas symbols

我正在做以下事情。我得到的只是基本字体,而不是我的自定义符号字体。

有什么想法吗?

     Paint pnt = new Paint();
    // SymbolNo is 38. Returns string "&" which is correct in normal font.
    String symbolText = Character.toString((char)SymbolNo); 

    // Should adopt a symbol font and draw symbol to screen instead. But I just see "&"
    Typeface tf = Typeface.createFromAsset(m_context.getAssets(), "fonts/myFont.TTF" ); 
    pnt.setTypeface(tf);

    m_canvas.drawText(symbolText,x, y, pnt);

我的字体位于assets/fonts/myFont.TTF

2 个答案:

答案 0 :(得分:1)

并非所有字体都适用于Android。它只是默默地失败。

一个行动方案是找到一个绝对处理自定义字体的应用程序 - 例如this sample app of mine - 作为实验的基础。您可以运行该应用程序以确认其字体出现,然后用您的字体替换其中一个。如果这样可行,那么你在字体中加载的方式就会出现问题(尽管我不知道是什么或如何)。如果字体无法在我的示例应用程序中工作,该应用程序附带的字体确实有效,则问题在于字体。

不幸的是,我不知道是什么使字体工作或不工作。您可以尝试在字体编辑器中打开字体,进行微小的更改(例如,删除一些您知道不需要的字形),将其保存回来,并查看修改后的字体是否有效。如果确实如此,那意味着无论最初保存的字体是否包含Android不喜欢的内容,而且您的字体编辑器可以生成Android友好的字体。

答案 1 :(得分:-3)

你好,我有一个解决方案,你可以尝试以这种方式使用字体......我已经在我的项目中实现了这个...

步骤:

  1. 制作一个包(com.fontUtils.fonts)
  2. 为TextView,EditText或按钮文字
  3. 制作字体文件

    例如:

        public class ButtonHelveticaBold extends Button {
    
            Context ButtonFontContext;
    
            public ButtonHelveticaBold(Context context, AttributeSet attrs, int defStyle) {
                super(context, attrs, defStyle);
                ButtonFontContext = context;
            }
    
            public ButtonHelveticaBold(Context context, AttributeSet attrs) {
                super(context, attrs);
                ButtonFontContext = context;
            }
    
            public ButtonHelveticaBold(Context context) {
                super(context);
                ButtonFontContext = context;
            }
    
            @Override
            public void setTypeface(Typeface tf, int style) {
                Typeface typeFaceHelvetica;
                if (style == Typeface.BOLD) {
                    typeFaceHelvetica = Typeface.createFromAsset(getContext().getAssets(), "fonts/helvetica_bold_neue.ttf");
                } else {
                    typeFaceHelvetica = Typeface.createFromAsset(getContext().getAssets(), "fonts/helvetica_neue_regular.ttf");
                }
                super.setTypeface(typeFaceHelvetica);
            }
    
        }
    

    3:在XML中使用它就像这样:

       <com.fontUtils.fonts.ButtonHelveticaBold 
          android:id="@+id/btn"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          />