64

こちらのガイドに従って、AndroidのTextViewにカスタムフォントを使用しようとしています。同じフォント、同じコード、同じすべてを使用して、これをadblogcatで取得します。

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を使用しています。別のカスタムフォントであるpredator.ttfも使用していますが、TrueType形式です。

関連コード:

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に何か重要な変更があり、これを行うことができませんでしたか?

4

9 に答える 9

48

AndroidはOpenType(OTF)をサポートしておらず、TrueType(TTF)のみをサポートしているため、Molot.otfフォントはおそらく機能しません。私はあなたがリンクしている両方のブログ投稿をあなたの冒頭の文章に書きました(一方は他方の海賊版です)、そして彼らはを使用していませんMolot.otf

(ところで、私はその投稿のフォーマットをいくらか修復しました-AndroidGuysはWordPressホストを変更し続けるので、私の古い投稿はフォーマットに関してひどく壊れています)。

編集:コメントで述べられているように、AndroidはOTFをサポートするようになりました。

于 2010-06-11T15:26:07.573 に答える
27

私も同じエラーが発生し、解決策が続きます。

Typeface tf = Typeface.createFromAsset(getAssets(), "fonts/Molot.otf")

Eclipsefonts/Molot.otfのフォルダーに入れる必要があります。assets/fonts

あなたがそれを実行することができた後。

あなたがそれをうまく実行することができないならば、あなたは経由してproplemを送ることができます

于 2011-05-10T04:52:08.100 に答える
10

残念ながら、書体をエラーにすることはできません。これはあまり具体的ではなく、多くの問題が発生した結果である可能性があります。2つのことを確認することが重要です。

  • 最初で最も重要なのは、ファイルが見つかったことです。
  • フォントはお使いのデバイスで有効です。

最良の方法は、フォントファイルを既知の有効なフォントファイルに変更することです。
それが失敗した場合、それは最初の問題です。
そうでない場合は2番目なのでFontForge、別のフォントを処理するか探す必要があります。

于 2011-10-26T16:40:42.933 に答える
9

フォントの名前と拡張子を確認してください。大文字と小文字が区別され、おそらくすべて大文字です。例えば。

Typeface tf = Typeface.createFromAsset(getAssets(), "fonts/MOLOT.OTF")
于 2012-10-12T11:15:21.560 に答える
6

ご参考までに。クラッシュの私の理由は、Eclipseが原因の何らかの理由です。私がしたのは、プロジェクトをクリーンアップして再度実行するだけで、それで機能します。

最初に、いくつかの新しい機能を試すために使用するテストプロジェクトでカスタムフォントを試しました。これは初めて機能しました。しかし、上記のようにするまで、私が取り組んでいるプロジェクトでは機能しませんでした。

したがって、できるだけ多くの方法を試してください。

于 2012-01-12T09:26:28.523 に答える
6

Androidは書体のOTFファイルをサポートしています。この問題が発生した場合は、font.putフォントの正しいパスをassetsフォルダー内のフォルダーfontsに設定し、次のように書体を作成してください。

Typeface typeface = Typeface.createFromAsset(getAssets(), "font/StencilStd.otf");
TextView text = (TextView) findViewById(R.id.textView);
text.setTypeface(typeface);
于 2018-07-18T07:58:57.477 に答える
4

バイナリmodの「Fontlab」ソフトウェアを使用してフォントを編集する必要があります。

于 2013-07-28T11:10:52.467 に答える
4

@deng彼の答えは私のために働いた」:

フォントの名前と拡張子を確認してください。大文字と小文字が区別され、おそらくすべて大文字です。例えば。

Typeface tf = Typeface.createFromAsset(getAssets(), "fonts/MOLOT.OTF")
于 2013-07-30T09:37:54.957 に答える
1

AndroidはTypefacesのOTFファイルをサポートしています。この問題が発生した場合は、フォントの正しいパスを設定していることを確認してください。たとえば、ファイルfontname.otfがある場合は、アセット内のfontsフォルダーに配置します。フォルダを作成し、次のように書体を作成します。

Typeface typeface = Typeface.createFromAsset(getAssets(), "fonts/fontname.otf");

(パス引数は「/」で始めることはできません)また、ファイル名には特殊文字や「-」を含めることはできず、小文字にする必要があります

于 2014-08-23T23:45:52.167 に答える