我想在我的Android应用程序中包含一个自定义字体。这是我遵循的教程,这似乎适用于许多人:http://tharindudassanayake.wordpress.com/2012/02/25/use-sinhala-fonts-for-your-android-app/
这是我尝试过的方式:
XML:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/sinhala_font"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="wdhqfndajka"
android:textSize="25sp" />
</LinearLayout>
代码:
TextView txt = (TextView) findViewById(R.id.sinhala_font);
Typeface font = Typeface.createFromAsset(getAssets(), "fonts/amal.TTF");
txt.setTypeface(font);
不幸的是,应用程序崩溃(由于原生字体无法制作),我在日志中获得以下内容:
10-27 11:39:14.311: E/AndroidRuntime(28133): FATAL EXCEPTION: main
10-27 11:39:14.311: E/AndroidRuntime(28133): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.sinhala/com.example.sinhala.MainActivity}: java.lang.RuntimeException: native typeface cannot be made
10-27 11:39:14.311: E/AndroidRuntime(28133): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1970)
10-27 11:39:14.311: E/AndroidRuntime(28133): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1995)
10-27 11:39:14.311: E/AndroidRuntime(28133): at android.app.ActivityThread.access$600(ActivityThread.java:128)
10-27 11:39:14.311: E/AndroidRuntime(28133): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1161)
10-27 11:39:14.311: E/AndroidRuntime(28133): at android.os.Handler.dispatchMessage(Handler.java:99)
10-27 11:39:14.311: E/AndroidRuntime(28133): at android.os.Looper.loop(Looper.java:137)
10-27 11:39:14.311: E/AndroidRuntime(28133): at android.app.ActivityThread.main(ActivityThread.java:4517)
10-27 11:39:14.311: E/AndroidRuntime(28133): at java.lang.reflect.Method.invokeNative(Native Method)
10-27 11:39:14.311: E/AndroidRuntime(28133): at java.lang.reflect.Method.invoke(Method.java:511)
10-27 11:39:14.311: E/AndroidRuntime(28133): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:993)
10-27 11:39:14.311: E/AndroidRuntime(28133): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:760)
10-27 11:39:14.311: E/AndroidRuntime(28133): at dalvik.system.NativeStart.main(Native Method)
10-27 11:39:14.311: E/AndroidRuntime(28133): Caused by: java.lang.RuntimeException: native typeface cannot be made
10-27 11:39:14.311: E/AndroidRuntime(28133): at android.graphics.Typeface.<init>(Typeface.java:238)
10-27 11:39:14.311: E/AndroidRuntime(28133): at android.graphics.Typeface.createFromAsset(Typeface.java:212)
10-27 11:39:14.311: E/AndroidRuntime(28133): at com.example.sinhala.MainActivity.onCreate(MainActivity.java:15)
10-27 11:39:14.311: E/AndroidRuntime(28133): at android.app.Activity.performCreate(Activity.java:4470)
10-27 11:39:14.311: E/AndroidRuntime(28133): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1053)
10-27 11:39:14.311: E/AndroidRuntime(28133): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1934)
10-27 11:39:14.311: E/AndroidRuntime(28133): ... 11 more
这可能是什么原因?任何帮助表示赞赏!
答案 0 :(得分:7)
您是在资源中创建了一个名为fonts
的文件夹还是直接放在assets
文件夹中?如果未创建文件夹创建文件夹并将您的字体文件放在那里我认为这是错误的...例如,他没有创建他正在直接访问的任何fonts
文件夹,但是您正在从fonts文件夹中访问..
如果不是fonts文件夹,则将此行更改为。
Typeface font = Typeface.createFromAsset(getAssets(), "fonts/amal.TTF");
像这样......
Typeface font = Typeface.createFromAsset(getAssets(), "amal.TTF");
答案 1 :(得分:4)
我得到了同样的例外。
在我的情况下,我给了我的ttf文件错误的路径。
我写道:/font/somefont.ttf
我通过删除第一个连字符font/somefont.ttf
答案 2 :(得分:3)
如果您使用的是Android Studio,通过将“assets /”文件夹放在“src / main”中,不会与“src /".
答案 3 :(得分:1)
在Typeface font = Typeface.createFromAsset(getAssets(), "fonts/amal.TTF");
更改为
Typeface font = Typeface.createFromAsset(getAssets(), "fonts/amal.ttf");
那为我解决了。