在应用程序中我必须使用自定义字体。首先,我创建扩展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)
答案 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"
。试试吧。
更新2 :我还尝试在{7}上的AGENCYR.TTF
文件中加载代理商FB 字体机。这个确切的代码在5.0 8900模拟器上为我工作:
C:\windows\Fonts\AGENCYR.TTF
答案 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());
}
}