自定义黑莓中的字体问题

时间:2013-01-15 05:59:26

标签: blackberry java-me fonts styles

在应用程序中我必须使用自定义字体。首先,我创建扩展VerticalFieldManager类的类。在这个类我想使用自定义字体。我有TTF文件(名称是AGENCYB.TTF)。我将此文件保存在res / img文件夹中。要加载此文件,请使用以下代码:

if (FontManager.getInstance().load("AGENCYB.TTF", "MyFont",
        FontManager.APPLICATION_FONT) == FontManager.SUCCESS)
{
   System.out.println("**************************IF SUCCESS*******");
   try
   {
      FontFamily typeface = FontFamily.forName("MyFont");
      myFont = typeface.getFont(Font.BOLD, 50);
      label2.setFont(myFont);
   }
   catch (ClassNotFoundException e)
   {
      System.out.println(e.getMessage());
   }
}

但它不会改变标签字段的字体。我使用这个链接实现了代码: http://docs.blackberry.com/en/developers/deliverables/18095/BlackBerry_Java_SDK-Development_Guide--1239696-0730090812-001-6.0-US.pdf

任何想法都会有很大的帮助。

由于

** * ** * ** * 的* 修改 * ** * ** * ** * ****

if (FontManager.getInstance().load("AGENCYB.TTF", "AGENCYB", FontManager.APPLICATION_FONT) == FontManager.SUCCESS)

3 个答案:

答案 0 :(得分:1)

首先,this is the BlackBerry tutorial I've used for loading custom fonts

其次,我没有看到API文档说FontManager.load()返回的任何值的返回码为8。 SUCCESS的值为0,因此您无法成功调用load()

http://www.blackberry.com/developers/docs/7.0.0api/net/rim/device/api/ui/FontManager.html

  

退货
  如果字体加载成功,则为FontManager.SUCCESS。
  如果加载了太多字体,则为FontManager.FONTS_ARRAY_FULL。
  如果字体名称无效,则为FontManager.MISSING_TYPEFACE_NAME。   如果字体名称重复,则为FontManager.DUPLICATE_NAME。
  如果字体数据重复,则为FontManager.DUPLICATE_DATA。
  如果未找到字体数据,则为FontManager.NO_FONT_DATA。
  如果字体数据超过60k,则为FontManager.EXCEEDS_LIMIT。
  如果无法找到字体文件,则为FontManager.MISS_RESOURCE。
  如果字体数据无效或字体格式无效,则为FontManager.FAILED_TO_LOAD_FILE。

当我在OS 5.0和7.1上运行调试器时,我看到-8等于FontManager.DUPLICATE_NAME,但没有看到任何代码等于8

另外,你自己生成了这个字体文件(AGENCYB.TTF)吗?因为您的代码要求在AGENCYB.TTF文件中使用名为 MyFont 的字体。我不希望字体实际上被命名为 MyFont ,除非是有人编写 Hello World 程序(以及自制的.ttf文件)。

如果这是自定义字体,由第三方字体库提供,或从别人那里购买,我希望字体名称不是 MyFont ,这就是他们所拥有的在您可能从中复制代码的BlackBerry示例中。

所以,请仔细检查,并告诉我们它是否仍无效。


更新,因为您在代码中使用字符串"AGENCYB"时看起来也会失败,我认为问题在于您使用了错误的字体名称。即使文件是AGENCYB.TTF,我也打赌> 内的字体名称 AGENCYB。这是您在Windows C:\Windows\fonts下找到的文件吗?如果是这样,您可以使用Windows(至少7)来查看字体文件。

只需双击Windows资源管理器中的.ttf文件,它就会给你一个预览,显示正确的字体名称。 这个名称是您在两个 java调用中使用的名称,示例代码中包含"MyFont"。在这种情况下,您会看到字体名称可能是"Agency FB"。试试吧。

enter image description here


更新2 :我还尝试在{7}上的AGENCYR.TTF文件中加载代理商FB 字体机。这个确切的代码在5.0 8900模拟器上为我工作:

C:\windows\Fonts\AGENCYR.TTF

enter image description here

答案 1 :(得分:0)

你应该检查是否已经加载了所需的字体,这样它就会给你一个-8或成功的int就可以了!

答案 2 :(得分:0)

LabelField lbl = new LabelField(“This is test Label”);

// IF字体已加载,请使用以下

   if(FontManager.getInstance().load("TickingTimebombBB_ital.ttf", "Ticking Timebomb BB", FontManager.APPLICATION_FONT) == FontManager.DUPLICATE_NAME){
         Logger.debug("---font already loaded-----");
            try 
            {
                System.out.println("---load once more---");
                FontFamily typeface = FontFamily.forName("Ticking Timebomb BB");
                Font myFont = typeface.getFont(Font.PLAIN, 80);
                lbl.setFont(myFont); 
            }
            catch (ClassNotFoundException e) 
            {
                Logger.error("---error-----"+e.getMessage());
            }
    }

如果尚未加载字体,请使用以下

else if(FontManager.getInstance().load("TickingTimebombBB_ital.ttf", "Ticking Timebomb BB", FontManager.APPLICATION_FONT) == FontManager.SUCCESS) {
            try 
            {
                Logger.debug("---load first time---");
                FontFamily typeface = FontFamily.forName("Ticking Timebomb BB");
                Font myFont = typeface.getFont(Font.PLAIN, 80);
                lbl.setFont(myFont); 
            }
            catch (ClassNotFoundException e) 
            {
                Logger.error("---error-----"+e.getMessage());
            }

    }