1

アプリケーションでは、カスタムフォントを使用する必要があります。まず、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)
4

3 に答える 3

1

まず、これは私がカスタムフォントをロードするために使用したBlackBerryチュートリアルです

第二に、APIドキュメントが返す値のいずれにも8の戻りコードが表示されませんFontManager.load()は値0であるため、を正常に呼び出すSUCCESSことはできません。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という名前のフォントを要求しているからです。Hello Worldプログラム(および自家製の.ttfファイル)を書いている人でない限り、フォントが実際にMyFontという名前になるとは思いません。

これがカスタムフォントであるか、サードパーティのフォントライブラリによって提供されているか、他の人から購入したものである場合、フォント名はMyFont以外のものであると予想されます。これは、おそらくコードをコピーしたBlackBerryサンプルに含まれているものです。から。

それで、それを再確認して、それがまだ機能していないかどうか私たちに知らせてください。


更新:コードで文字列を使用すると失敗するように見えるので"AGENCYB"、問題は間違ったフォント名を使用していることだと思います。ファイルはですが、そのファイルAGENCYB.TTFのフォント名はではないに違いありません。これは、Windowsで見つけたのと同じファイルですか?その場合は、Windows(少なくとも7)を使用してフォントファイルを確認できます。 AGENCYBC:\Windows\fonts

Windowsエクスプローラーで.ttfファイルをダブルクリックするだけで、適切なフォント名を示すプレビューが表示されます。 その名前は、2つのJava呼び出しで使用する名前であり、サンプルコードにはが含まれてい"MyFont"ます。この場合、フォント名はおそらく"Agency FB"です。それを試してみてください。

ここに画像の説明を入力してください


更新2: Windows7マシンにあるファイルからAgencyFBフォントを ロードしてみました。この正確なコードは、5.08900シミュレーターで機能しました。AGENCYR.TTFC:\windows\Fonts\AGENCYR.TTF

  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) 
     {
     }
  }

ここに画像の説明を入力してください

于 2013-01-16T06:23:23.023 に答える
0

正確に、必要なフォントがすでにロードされているかどうかを確認する必要があります。そうすれば、-8またはsuccessintが得られます。

于 2013-04-14T04:51:45.527 に答える
0

LabelField lbl = new LabelField( "これはテストラベルです");

//フォントがすでにロードされている場合は、次を使用します

   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());
            }

    }
于 2014-01-21T08:50:18.553 に答える