自定义字体空指针异常

时间:2014-10-19 13:36:02

标签: android fonts

我已经尝试了所有我能找到的自定义字体工作,但我一直得到一个空指针异常。这就是我的所作所为:

  1. 创建文件夹'字体'在资产' 。目录

  2. 下载了Google的“Roboto'字体来自:http://www.fontspace.com/google-android/roboto

  3. 重命名文件' Roboto-Regular.ttf'到' r.ttf'

  4. 上传到assets / fonts /目录

  5. 做了Project-> Clean

  6. 现在我有了这段代码:

                try {
                    fileList = am.list("fonts");
    
                     if (fileList != null)
                     {   
                         for ( int i = 0;i<fileList.length;i++)
                         {
                             Toast.makeText(getApplicationContext(), fileList[i] + "!", Toast.LENGTH_LONG).show();
                         }
                     }
                } catch (IOException e) {
                       Toast.makeText(getApplicationContext(), e.toString(), Toast.LENGTH_LONG).show();
                }
    
    
             try {
    
             Typeface font = Typeface.createFromAsset(getAssets(), "fonts/r.ttf");
    
             TextView txt = (TextView) findViewById(R.id.rowTextView);
             txt.setTypeface(font);
             }
             catch(Exception e)
             {
                 Toast.makeText(getApplicationContext(), e.toString(), Toast.LENGTH_LONG).show();
             }
    

    代码的第一部分列出了&#39;字体&#39;中的所有项目。文件夹,我弹出一个显示&#39; r.ttf&#39;。

    代码的第二部分尝试加载字体,我从那里得到一个带有&#39;空指针异常&#39;的弹出窗口。

    任何想法我做错了什么?谢谢!

    编辑: 这个例外被抛出: txt.setTypeface(font)上的java.lang.NullPointerException;

    EDIT2:

    这是我的activity_main.xml

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#000000"
    
    android:paddingBottom="@dimen/activity_vertical_margin"
    
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.kb.klog.MainActivity" >
    
    <ListView
        android:id="@+id/listView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >
    
    </ListView>
    
    </RelativeLayout>
    

    这是我尝试将字体更改为:/res/layout/row.xml

    的行
    <TextView xmlns:android="http://schemas.android.com/apk/res/android"  
    android:id="@+id/rowTextView"   
    android:layout_width="fill_parent"   
    android:layout_height="wrap_content"  
    android:padding="5dp"  
    android:textColor="#aaa"
    android:textSize="18sp">  
    

2 个答案:

答案 0 :(得分:3)

txt 的值为null,因为此时此行尚未膨胀。 我建议使用这个答案https://stackoverflow.com/a/9035924/2160877
通常,您应该创建自己的扩展TextView的类。然后你在xml中引用那个类,那就是全部。

如果链接被删除,这里是您的类的代码(从链接中获取,并根据您的情况进行一些修改):

package com.yourPackageNameGoesHere;

import android.content.Context;
import android.graphics.Typeface;
import android.util.AttributeSet;
import android.widget.TextView;

public class MyTextView extends TextView {

    public MyTextView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        init();
    }

    public MyTextView(Context context, AttributeSet attrs) {
        super(context, attrs);
        init();
    }

    public MyTextView(Context context) {
        super(context);
        init();
    }

    private void init() {
        Typeface tf = Typeface.createFromAsset(getContext().getAssets(),
                                               "r.ttf");
        setTypeface(tf);
    }

}

然后您的/res/layout/row.xml将如下所示:

<com.yourPackageNameGoesHere.MyTextView xmlns:android="http://schemas.android.com/apk/res/android"  
android:id="@+id/rowTextView"   
android:layout_width="fill_parent"   
android:layout_height="wrap_content"  
android:padding="5dp"  
android:textColor="#aaa"
android:textSize="18sp"> 

答案 1 :(得分:0)

如果您需要自定义字体,请使用此代码

确保您将字体放入assets/fonts

        Typeface myTypeface = Typeface.createFromAsset(getAssets(), "fonts/myFont.ttf");
        TextView myTextView = (TextView)findViewById(R.id.myTextView);
        myTextView.setTypeface(myTypeface);