我已经尝试了所有我能找到的自定义字体工作,但我一直得到一个空指针异常。这就是我的所作所为:
创建文件夹'字体'在资产' 。目录
下载了Google的“Roboto'字体来自:http://www.fontspace.com/google-android/roboto
重命名文件' Roboto-Regular.ttf'到' r.ttf'
上传到assets / fonts /目录
做了Project-> Clean
现在我有了这段代码:
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">
答案 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);