我在我的 android 应用程序中包含外部字体资产,但是,eclipse 无法在 xml 预览中呈现它们。
当我在应用程序中包含字体(将 ttf 放在 /assets/fonts 文件夹中)并使用代码动态设置我的 textview 字体时:
mFont = Typeface.createFromAsset(getAssets(),"fonts/fontfilename.ttf");
textview = (TextView) findViewById(R.id.text_view);
textview.setTypeface(mFont);
文本使用我的设备或模拟器上的应用程序中的字体正确呈现,但是我不知道如何让 eclipse 在 xml 预览中呈现它们。我试过扩展 TextView 类:
public class ExTextView extends TextView {
private static final Typeface MY_FONT_01 = Typeface.create("mfont-01", 0); //, Typeface.BOLD);
private static final Typeface MY_FONT_02 = Typeface.create("mfont-02", 0); //, Typeface.NORMAL);
public ExTextView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
if (getTypeface().equals(MY_FONT_01)) {
Typeface mFont = Typeface.createFromAsset(getContext().getAssets(),"fonts/myfont01.ttf");
setTypeface(mFont);
setPadding(0, (int) (-0.9f * getTextSize()), 0, (int) (-0.2f * getTextSize()));
setTextSize(0x00000001, (int)48);
} else if (getTypeface().equals(MY_FONT_02)) {
Typeface mFont = Typeface.createFromAsset(getContext().getAssets(),"fonts/myfont02.ttf");
setTypeface(mFont);
setPadding(0, (int) (-0.5f * getTextSize()), 0, (int) (-0.5f * getTextSize()));
setTextSize(0x00000001, (int) 24);
}
}
}
并将其放入xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<com.example.extendedtextview.ExTextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="mfont-01"
android:text="ExTextView-01" />
<com.example.extendedtextview.ExTextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="mfont-02"
android:text="ExTextView-02" />
</LinearLayout>
但是字体没有根据 ExTextView.java 中声明的内容呈现。我知道这对于这个特别简单的应用程序来说是困难的,但在更复杂的场景中,这种结构可能很有用,所以我想弄清楚如何让它工作。
当我尝试运行该应用程序时,我在 logcat 中收到错误:
04-03 11:38:08.149: E/AndroidRuntime(689): Caused by: android.view.InflateException: Binary XML file line #7: Error inflating class com.example.extendedtextview.ExTextView
非常感谢任何建议或提示。