ガイド here に従って、AndroidのTextViewにカスタムフォントを使用しようとしています。同じフォント、同じコード、同じすべてを使用して、adb logcatでこれを取得します:
W/dalvikvm( 317): threadid=1: thread exiting with uncaught exception (group=0x4001d800)
E/AndroidRuntime( 317): FATAL EXCEPTION: main
E/AndroidRuntime( 317): Java.lang.RuntimeException: Unable to start activity ComponentInfo{org.evilx.quacklock/org.evilx.quacklock.MainActivity}: Java.lang.RuntimeException: native typeface cannot be made
E/AndroidRuntime( 317): at Android.app.ActivityThread.performLaunchActivity(ActivityThread.Java:2663)
E/AndroidRuntime( 317): at Android.app.ActivityThread.handleLaunchActivity(ActivityThread.Java:2679)
E/AndroidRuntime( 317): at Android.app.ActivityThread.access$2300(ActivityThread.Java:125)
E/AndroidRuntime( 317): at Android.app.ActivityThread$H.handleMessage(ActivityThread.Java:2033)
E/AndroidRuntime( 317): at Android.os.Handler.dispatchMessage(Handler.Java:99)
E/AndroidRuntime( 317): at Android.os.Looper.loop(Looper.Java:123)
E/AndroidRuntime( 317): at Android.app.ActivityThread.main(ActivityThread.Java:4627)
E/AndroidRuntime( 317): at Java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime( 317): at Java.lang.reflect.Method.invoke(Method.Java:521)
E/AndroidRuntime( 317): at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:868)
E/AndroidRuntime( 317): at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:626)
E/AndroidRuntime( 317): at dalvik.system.NativeStart.main(Native Method)
E/AndroidRuntime( 317): Caused by: Java.lang.RuntimeException: native typeface cannot be made
E/AndroidRuntime( 317): at Android.graphics.Typeface.<init>(Typeface.Java:147)
E/AndroidRuntime( 317): at Android.graphics.Typeface.createFromAsset(Typeface.Java:121)
E/AndroidRuntime( 317): at org.evilx.quacklock.MainActivity.onCreate(MainActivity.Java:24)
E/AndroidRuntime( 317): at Android.app.Instrumentation.callActivityOnCreate(Instrumentation.Java:1047)
E/AndroidRuntime( 317): at Android.app.ActivityThread.performLaunchActivity(ActivityThread.Java:2627)
E/AndroidRuntime( 317): ... 11 more
W/ActivityManager( 59): Force finishing activity org.evilx.quacklock/.MainActivity
W/ActivityManager( 59): Activity pause timeout for HistoryRecord{43e80368 org.evilx.quacklock/.MainActivity}
D/dalvikvm( 247): GC_EXPLICIT freed 711 objects / 53160 bytes in 20922ms
私はブログの1つで正常に使用されたフォントMolot.otfを使用しています。また、別のカスタムフォントですが、TrueType形式のpredator.ttfを使用しています。
関連コード:
public class MainActivity extends Activity {
// Called when the activity is first created.
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
Typeface tf = Typeface.createFromAsset(getAssets(), "fonts/Molot.otf");
TextView tv = (TextView) findViewById(R.id.CustomFontText);
tv.setTypeface(tf);
}
}
そして
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:orientation="vertical"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent">
<TextView
Android:id="@+id/CustomFontText"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:textSize="30sp"
Android:text="Here is some text.">
</TextView>
</LinearLayout>
これは何が原因ですか?それはブログの人々のために働いたので、なぜ私ではないのですか? APIに何か大きな変更があったので、これができなくなりましたか?
AndroidはOpenType(OTF)をサポートせず、TrueType(TTF)のみをサポートしているため、Molot.otf
フォントはおそらく機能しません。冒頭の文章でリンク先のブログ投稿を両方とも書きました(一方は他方の海賊版です)。彼らはMolot.otf
。
(ところで、私はその投稿のフォーマットを多少修正しました-AndroidGuysはWordPressホストを変更し続けるため、古い投稿はフォーマットに関してひどく壊れています)。
[〜#〜] edit [〜#〜]:コメントで述べたように、Android [〜#〜] does [〜#〜]がOTFをサポートするようになりました。
また、同じエラーが発生し、解決策があります。
Typeface tf = Typeface.createFromAsset(getAssets(), "fonts/Molot.otf")
fonts/Molot.otf
in assets/fonts
フォルダーのEclipse。
実行した後。
あなたがそれを正常に実行できない場合、あなたは
残念ながら、書体を作成することはできませんエラーはそれほど明確ではなく、多くの問題が発生した結果である可能性があります。 2つのことを確認することが重要です。
最善の方法は、既知の有効なフォントファイルのフォントファイルを変更することです。
失敗した場合、それが最初の問題です。
そうでない場合は2番目なので、FontForge
を処理するか、別のフォントを探す必要があります。
フォントの名前と拡張子を確認してください。大文字と小文字が区別され、おそらくすべて大文字です。例えば。
Typeface tf = Typeface.createFromAsset(getAssets(), "fonts/MOLOT.OTF")
ご参考までに。クラッシュの私の理由は、Eclipseによって引き起こされた何らかの理由です。私がやったのは、プロジェクトをきれいにして再び実行するだけで、その後は動作します。
最初に、テストプロジェクトでカスタムフォントを試しましたが、これを使用していくつかの新しい機能を試しました。しかし、上記のようになるまで、私が取り組んでいるプロジェクトでは動作しませんでした。
できるだけ多くの方法を試してください。
AndroidはタイプフェイスのOTFファイルをサポートしています。この問題に直面している場合は、fonts.putフォントの正しいパスをアセットフォルダー内のフォルダーフォントに設定し、以下のようにタイプフェイスを作成してください。
Typeface typeface = Typeface.createFromAsset(getAssets(), "font/StencilStd.otf");
TextView text = (TextView) findViewById(R.id.textView);
text.setTypeface(typeface);
@deng彼の答えは私のために働いた」
フォントの名前と拡張子を確認してください。大文字と小文字が区別され、おそらくすべて大文字です。例えば。
Typeface tf = Typeface.createFromAsset(getAssets(), "fonts/MOLOT.OTF")
バイナリmodの「Fontlab」ソフトウェアでフォントを編集する必要があります。
Androidは、TypefacesのOTFファイルをサポートしています。この問題に直面している場合は、フォントの正しいパスを設定していることを確認してください。たとえば、fontname.otfファイルがある場合は、アセット内のフォルダーフォントに入れますフォルダを作成し、次のような書体を作成します。
Typeface typeface = Typeface.createFromAsset(getAssets(), "fonts/fontname.otf");
(パス引数は「/」で始まってはなりません)、ファイル名には特殊文字や「-」を含めてはならず、小文字にする必要があります