0

I'm trying to change textView's font programatically and my app keeps crashing. This is how I'm doing it:

//SET CUSTOM FONT FOR TIMER
    String fontPath = "fonts/voice_notepad_font.ttf";
    TextView timer = (TextView)findViewById(R.id.timer);
    Typeface tf = Typeface.createFromAsset(getAssets(), fontPath);
    timer.setTypeface(tf);

This is the font I'm using

Logcat:

08-13 23:36:44.079: E/AndroidRuntime(11027): FATAL EXCEPTION: main
08-13 23:36:44.079: E/AndroidRuntime(11027): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.whizzappseasyvoicenotepad/com.whizzappseasyvoicenotepad.TabLayout}: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.whizzappseasyvoicenotepad/com.whizzappseasyvoicenotepad.MainActivity}: java.lang.RuntimeException: native typeface cannot be made
08-13 23:36:44.079: E/AndroidRuntime(11027):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2211)
08-13 23:36:44.079: E/AndroidRuntime(11027):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261)
08-13 23:36:44.079: E/AndroidRuntime(11027):    at android.app.ActivityThread.access$600(ActivityThread.java:141)
08-13 23:36:44.079: E/AndroidRuntime(11027):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256)
08-13 23:36:44.079: E/AndroidRuntime(11027):    at android.os.Handler.dispatchMessage(Handler.java:99)
08-13 23:36:44.079: E/AndroidRuntime(11027):    at android.os.Looper.loop(Looper.java:137)
08-13 23:36:44.079: E/AndroidRuntime(11027):    at android.app.ActivityThread.main(ActivityThread.java:5103)
08-13 23:36:44.079: E/AndroidRuntime(11027):    at java.lang.reflect.Method.invokeNative(Native Method)
08-13 23:36:44.079: E/AndroidRuntime(11027):    at java.lang.reflect.Method.invoke(Method.java:525)
08-13 23:36:44.079: E/AndroidRuntime(11027):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
08-13 23:36:44.079: E/AndroidRuntime(11027):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
08-13 23:36:44.079: E/AndroidRuntime(11027):    at dalvik.system.NativeStart.main(Native Method)
08-13 23:36:44.079: E/AndroidRuntime(11027): Caused by: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.whizzappseasyvoicenotepad/com.whizzappseasyvoicenotepad.MainActivity}: java.lang.RuntimeException: native typeface cannot be made
08-13 23:36:44.079: E/AndroidRuntime(11027):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2211)
08-13 23:36:44.079: E/AndroidRuntime(11027):    at android.app.ActivityThread.startActivityNow(ActivityThread.java:2054)
08-13 23:36:44.079: E/AndroidRuntime(11027):    at android.app.LocalActivityManager.moveToState(LocalActivityManager.java:135)
08-13 23:36:44.079: E/AndroidRuntime(11027):    at android.app.LocalActivityManager.startActivity(LocalActivityManager.java:347)
08-13 23:36:44.079: E/AndroidRuntime(11027):    at android.widget.TabHost$IntentContentStrategy.getContentView(TabHost.java:749)
08-13 23:36:44.079: E/AndroidRuntime(11027):    at android.widget.TabHost.setCurrentTab(TabHost.java:413)
08-13 23:36:44.079: E/AndroidRuntime(11027):    at android.widget.TabHost.addTab(TabHost.java:240)
08-13 23:36:44.079: E/AndroidRuntime(11027):    at com.whizzappseasyvoicenotepad.TabLayout.onCreate(TabLayout.java:33)
08-13 23:36:44.079: E/AndroidRuntime(11027):    at android.app.Activity.performCreate(Activity.java:5133)
08-13 23:36:44.079: E/AndroidRuntime(11027):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
08-13 23:36:44.079: E/AndroidRuntime(11027):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2175)
08-13 23:36:44.079: E/AndroidRuntime(11027):    ... 11 more
08-13 23:36:44.079: E/AndroidRuntime(11027): Caused by: java.lang.RuntimeException: native typeface cannot be made
08-13 23:36:44.079: E/AndroidRuntime(11027):    at android.graphics.Typeface.<init>    (Typeface.java:175)
08-13 23:36:44.079: E/AndroidRuntime(11027):    at android.graphics.Typeface.createFromAsset(Typeface.java:149)
08-13 23:36:44.079: E/AndroidRuntime(11027):    at com.whizzappseasyvoicenotepad.MainActivity.onCreate(MainActivity.java:59)
08-13 23:36:44.079: E/AndroidRuntime(11027):    at android.app.Activity.performCreate(Activity.java:5133)
08-13 23:36:44.079: E/AndroidRuntime(11027):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
08-13 23:36:44.079: E/AndroidRuntime(11027):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2175)
08-13 23:36:44.079: E/AndroidRuntime(11027):    ... 21 more

I added the custom font to assets/fonts folder and renamed it to 'voice_notepad_font'

Guy
  • 6,414
  • 19
  • 66
  • 136

1 Answers1

1

Just found the problem! I don't know why, but the .ttf was in high case (voice_notepad_font.TTF), that's why it crashed.

I just changed the String fontPath to:

String fontPath = "fonts/voice_notepad_font.TTF"

And now it works perfectly.

This never happened before to be honest, everytime I download a custom font, the .ttf is in lowercase. That's why I didn't know what I was doing wrong.

Guy
  • 6,414
  • 19
  • 66
  • 136
  • 1
    Android uses Linux which is case sensitive, so your app crashed because the system couldn't find the font file you specified. – Kai Aug 14 '13 at 00:38