java - android list background
"RuntimeException:ネイティブ書体を作成できません"フォントを読み込むとき (6)
'Fontlab' Softwareをバイナリモードで使用してフォントを編集する必要があります。
私はAndroidのTextView用のカスタムフォントを使用しようとしていhere 。 hereとhereガイドに従ってください。 同じフォント、同じコード、同じものを使用して、私は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
うーん、いいよ。 私は、Molot.otfというフォントを使用しています。これは、ブログの1つでうまく使用されています。 私はまた、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にありましたか?
@彼の答えは私のために働いた ":
フォントの名前と拡張子を確認してください。 大文字と小文字は区別され、おそらくすべて大文字です。 例えば。
Typeface tf = Typeface.createFromAsset(getAssets(), "fonts/MOLOT.OTF")
AndroidはOpenType(OTF)、TrueType(TTF)のみをサポートしていないため、 Molot.otf
フォントはおそらく動作しません。 私はオープン・センテンスにリンクしているブログ・ポストを両方とも書いています(一方はもう一方のコピーです)、彼らはMolot.otf
使用しません。
(BTW、私はそのポストの書式をやや修正しました.AndroidGuysはWordPressホストを変更し続けていますので、私の古い投稿はフォーマットの点で非常に壊れています)。
編集 :コメントに記載されているように、Android DOESはOTFをサポートするようになりました。
AndroidはTypeface用のOTFファイルをサポートしていますが、この問題に直面している場合は、フォントの正しいパスを設定していることを確認してください。たとえば、fontname.otfというファイルがある場合は、次のような書体を作成します:
Typeface typeface = Typeface.createFromAsset(getAssets(), "fonts/fontname.otf");
(パス引数は "/"で始まらなければなりません)、ファイル名に特殊文字や " - "を含めてはならず、小文字にする必要があります
フォントの名前と拡張子を確認してください。 大文字と小文字は区別され、おそらくすべて大文字です。 例えば。
Typeface tf = Typeface.createFromAsset(getAssets(), "fonts/MOLOT.OTF")
残念なことに、 書体は非常に具体的ではないエラーにすることはできません 、そしてそれは間違っている多くの事の結果である可能性があります。 2つのことを確認することが重要です。
- 最初と最も重要な:ファイルが見つかりました!
- フォントはデバイスで有効です。
最善の方法は、既知の有効なフォントファイルのフォントファイルを変更することです。
それが失敗すれば、それは最初の問題です。
もしそうでなければ、それは2番目のものなので、 FontForge
を扱うか別のフォントを探す必要があります。