2013-06-23 53 views
0

我正在实现一个导航抽屉进入我的应用程序,我想更改字体。下面是我的onCreate方法,我改变了导航抽屉时,应用程序运行崩溃瞬间,我无法弄清楚什么是错的问题的字体Android - 更改抽屉式字体/文本

代码:

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.navdrawer); 

    android.support.v4.app.FragmentManager fragmentManager = getSupportFragmentManager(); 
    android.support.v4.app.FragmentTransaction fragmentTransaction = fragmentManager 
      .beginTransaction(); 
    Home fragment = new Home(); 
    fragmentTransaction.replace(R.id.llhome, fragment); 
    fragmentTransaction.commit(); 

    Typeface tf = Typeface.createFromAsset(getAssets(), 
      "robotomed.ttf"); 
    TextView tv = (TextView) findViewById(R.id.tvmenu); 
    tv.setTypeface(tf); 

    mPlanetTitles = getResources().getStringArray(R.array.planets_array); 
    mDrawerList = (ListView) findViewById(R.id.left_drawer); 

    mDrawerList.setAdapter(new ArrayAdapter<String>(this, 
      R.layout.drawer_list_item, mPlanetTitles)); 
    // Set the list's click listener 

    mDrawerList.setOnItemClickListener(new DrawerItemClickListener()); 

    mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); 
    mDrawerToggle = new ActionBarDrawerToggle(this, /* host Activity */ 
    mDrawerLayout, /* DrawerLayout object */ 
    R.drawable.ic_drawer, /* nav drawer icon to replace 'Up' caret */ 
    R.string.drawer_open, /* "open drawer" description */ 
    R.string.drawer_close /* "close drawer" description */ 
    ) { 

     /** Called when a drawer has settled in a completely closed state. */ 
     public void onDrawerClosed(View view) { 
      getActionBar().setTitle("Home"); 
     } 

     /** Called when a drawer has settled in a completely open state. */ 
     public void onDrawerOpened(View drawerView) { 
      getActionBar().setTitle("StayHealthy"); 
     } 
    }; 

    // Set the drawer toggle as the DrawerListener 
    mDrawerLayout.setDrawerListener(mDrawerToggle); 

    getActionBar().setDisplayHomeAsUpEnabled(true); 
    getActionBar().setHomeButtonEnabled(true); 



} 

这里是我的logcat的

06-22 21:44:21.562: E/AndroidRuntime(32042): FATAL EXCEPTION: main 
06-22 21:44:21.562: E/AndroidRuntime(32042): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.OptimusApps.stayhealthy/com.OptimusApps.stayhealthy.MainActivity}: java.lang.NullPointerException 
06-22 21:44:21.562: E/AndroidRuntime(32042): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2079) 
06-22 21:44:21.562: E/AndroidRuntime(32042): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2104) 
06-22 21:44:21.562: E/AndroidRuntime(32042): at android.app.ActivityThread.access$600(ActivityThread.java:132) 
06-22 21:44:21.562: E/AndroidRuntime(32042): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1157) 
06-22 21:44:21.562: E/AndroidRuntime(32042): at android.os.Handler.dispatchMessage(Handler.java:99) 
06-22 21:44:21.562: E/AndroidRuntime(32042): at android.os.Looper.loop(Looper.java:137) 
06-22 21:44:21.562: E/AndroidRuntime(32042): at android.app.ActivityThread.main(ActivityThread.java:4575) 
06-22 21:44:21.562: E/AndroidRuntime(32042): at java.lang.reflect.Method.invokeNative(Native Method) 
06-22 21:44:21.562: E/AndroidRuntime(32042): at java.lang.reflect.Method.invoke(Method.java:511) 
06-22 21:44:21.562: E/AndroidRuntime(32042): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789) 
06-22 21:44:21.562: E/AndroidRuntime(32042): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:556) 
06-22 21:44:21.562: E/AndroidRuntime(32042): at dalvik.system.NativeStart.main(Native Method) 
06-22 21:44:21.562: E/AndroidRuntime(32042): Caused by: java.lang.NullPointerException 
06-22 21:44:21.562: E/AndroidRuntime(32042): at com.OptimusApps.stayhealthy.MainActivity.onCreate(MainActivity.java:40) 
06-22 21:44:21.562: E/AndroidRuntime(32042): at android.app.Activity.performCreate(Activity.java:4465) 
06-22 21:44:21.562: E/AndroidRuntime(32042): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049) 
06-22 21:44:21.562: E/AndroidRuntime(32042): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2033) 
06-22 21:44:21.562: E/AndroidRuntime(32042): ... 11 more 

回答

0

logcat发现一个NullPointerException,所以很可能是字体加载不正确。你能证实你的robotomed.tff确实在你项目的/assets中吗?

检查here了解关于资产的更多信息。

0
Typeface tf = Typeface.createFromAsset(getBaseContext().getAssets(), 
      "fonts/robotomed.ttf"); 

// getBaseContext()是MainActivity.this

我建议创建资产的文件夹并添加它的fonts目录同样的事情。您可以从您的活动和您的字体目录中调用资产文件夹。另外,根据您的xml文件的结构,您可能无法使用findViewById()。原因是你的TextView可能是ListAdapter(思考列表项)的一部分。这就是说,如果它适用于ListAdapter,你将无法调用该Id。