在blackberry中定制字体问题
在应用程序中,我必须使用自定义字体。首先,我创建了一个扩展VerticalFieldManager类的类。在这个类中,我想使用自定义字体。我有一个TTF文件(名字是AGENCYB.TTF)。我把这个文件保存在res/img文件夹中。要加载此文件,我使用以下代码:在blackberry中定制字体问题,blackberry,java-me,fonts,styles,Blackberry,Java Me,Fonts,Styles,在应用程序中,我必须使用自定义字体。首先,我创建了一个扩展VerticalFieldManager类的类。在这个类中,我想使用自定义字体。我有一个TTF文件(名字是AGENCYB.TTF)。我把这个文件保存在res/img文件夹中。要加载此文件,我使用以下代码: if (FontManager.getInstance().load("AGENCYB.TTF", "MyFont", FontManager.APPLICATION_FONT) == FontManager.SUCCE
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());
}
}
但它不会改变标签字段的字体。我使用以下链接实现了代码:
任何想法都会大有帮助
谢谢
************编辑**************
if (FontManager.getInstance().load("AGENCYB.TTF", "AGENCYB", FontManager.APPLICATION_FONT) == FontManager.SUCCESS)
首先,
其次,在API文档所说的FontManager.load()
返回的任何值中,我都没有看到8的返回码SUCCESS
的值为0,因此您没有成功调用load()
返回:FontManager.SUCCESS,如果字体加载成功
如果加载的字体太多,则FontManager.FONTS_数组_已满
字体名称无效时,FontManager.缺少字体名称。 FontManager.DUPLICATE\u如果字体名称重复,则使用该名称
FontManager.DUPLICATE_数据(如果字体数据重复)
FontManager.NO_FONT_数据如果找不到字体数据
如果字体数据大小超过60k,则FontManager.com将超过_限制
如果找不到字体文件,则FontManager.MISS_资源
如果字体数据无效或字体格式无效,FontManager.u加载文件失败 在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\font
下找到的文件相同?如果是这样,您可以使用Windows(至少7)查看字体文件
只需在Windows资源管理器中双击.ttf文件,它将为您提供一个预览,显示正确的字体名称该名称是您在两个java调用中使用的名称,其中示例代码有“MyFont”
。在本例中,您会看到字体名称可能是“Agency FB”
。试试看
更新2:我还尝试从windows 7机器上的
C:\windows\font\AGENCYR.TTF
文件中加载代理FB字体。这段代码在5.0 8900模拟器上为我工作:
int result = FontManager.getInstance().load("AGENCYR.TTF", "Agency FB", FontManager.APPLICATION_FONT);
if (result == FontManager.SUCCESS)
{
try
{
FontFamily typeface = FontFamily.forName("Agency FB");
Font myFont = typeface.getFont(Font.PLAIN, 50);
helloWorld.setFont(myFont);
}
catch (ClassNotFoundException ex)
{
}
}
首先
其次,在API文档所说的FontManager.load()
返回的任何值中,我都没有看到8的返回码SUCCESS
的值为0,因此您没有成功调用load()
返回:FontManager.SUCCESS,如果字体加载成功
如果加载的字体太多,则FontManager.FONTS_数组_已满
字体名称无效时,FontManager.缺少字体名称。 FontManager.DUPLICATE\u如果字体名称重复,则使用该名称
FontManager.DUPLICATE_数据(如果字体数据重复)
FontManager.NO_FONT_数据如果找不到字体数据
如果字体数据大小超过60k,则FontManager.com将超过_限制
如果找不到字体文件,则FontManager.MISS_资源
如果字体数据无效或字体格式无效,FontManager.u加载文件失败 在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\font
下找到的文件相同?如果是这样,您可以使用Windows(至少7)查看字体文件
只需在Windows资源管理器中双击.ttf文件,它将为您提供一个预览,显示正确的字体名称该名称是您在两个java调用中使用的名称,其中示例代码有“MyFont”
。在本例中,您会看到字体名称可能是“Agency FB”
。试试看
更新2:
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());
}
}