Android 如何将字体设置为片段中的文本视图?

Android 如何将字体设置为片段中的文本视图?,android,xml,android-fragments,textview,typeface,Android,Xml,Android Fragments,Textview,Typeface,我想用以下代码更改片段中的TextView字体: @Override public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) { View v = inflater.inflate(R.layout.fragment_layout, container, false); TextView txt = (TextView) v.findVie

我想用以下代码更改
片段中的TextView字体:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle     savedInstanceState) {
   View v = inflater.inflate(R.layout.fragment_layout, container, false);
   TextView txt = (TextView) v.findViewById(R.id.Zipcode);
   Typeface font = Typeface.createFromAsset(getActivity().getAssets(), "fonts/customfont.ttf");
   txt.setTypeface(font); 
   return v;
}
但是它在下面的语句中强制关闭
txt.setTypeface(font)

有人知道如何解决这个问题吗?以下是日志:

04-27 13:02:23.825: D/ViewRootImpl(11706): pckname = com.group.factor
04-27 13:02:23.875: D/dalvikvm(11706): GC_FOR_ALLOC freed 92K, 4% free 6645K/6851K, paused 24ms
04-27 13:02:23.885: I/dalvikvm-heap(11706): Grow heap (frag case) to 7.985MB for 1495024-byte allocation
04-27 13:02:23.935: D/dalvikvm(11706): GC_CONCURRENT freed 2K, 3% free 8103K/8327K, paused 2ms+18ms
04-27 13:02:23.985: D/AndroidRuntime(11706): Shutting down VM
04-27 13:02:23.985: W/dalvikvm(11706): threadid=1: thread exiting with uncaught exception (group=0x40a4f1f8)
04-27 13:02:23.985: E/AndroidRuntime(11706): FATAL EXCEPTION: main
04-27 13:02:23.985: E/AndroidRuntime(11706): java.lang.RuntimeException: native typeface cannot be made
04-27 13:02:23.985: E/AndroidRuntime(11706):    at android.graphics.Typeface.<init>(Typeface.java:147)
04-27 13:02:23.985: E/AndroidRuntime(11706):    at android.graphics.Typeface.createFromAsset(Typeface.java:121)
04-27 13:02:23.985: E/AndroidRuntime(11706):    at com.group.factor.MainActivity$DummySectionFragment.onCreateView(MainActivity.java:179)
04-27 13:02:23.985: E/AndroidRuntime(11706):    at android.support.v4.app.Fragment.performCreateView(Fragment.java:1460)
04-27 13:02:23.985: E/AndroidRuntime(11706):    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:911)
04-27 13:02:23.985: E/AndroidRuntime(11706):    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1088)
04-27 13:02:23.985: E/AndroidRuntime(11706):    at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682)
04-27 13:02:23.985: E/AndroidRuntime(11706):    at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1444)
04-27 13:02:23.985: E/AndroidRuntime(11706):    at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:461)
04-27 13:02:23.985: E/AndroidRuntime(11706):    at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:141)
04-27 13:02:23.985: E/AndroidRuntime(11706):    at android.support.v4.view.ViewPager.populate(ViewPager.java:1064)
04-27 13:02:23.985: E/AndroidRuntime(11706):    at android.support.v4.view.ViewPager.populate(ViewPager.java:911)
04-27 13:02:23.985: E/AndroidRuntime(11706):    at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1432)
04-27 13:02:23.985: E/AndroidRuntime(11706):    at android.view.View.measure(View.java:12727)
04-27 13:02:23.985: E/AndroidRuntime(11706):    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4698)
04-27 13:02:23.985: E/AndroidRuntime(11706):    at android.widget.FrameLayout.onMeasure(FrameLayout.java:293)
04-27 13:02:23.985: E/AndroidRuntime(11706):    at android.view.View.measure(View.java:12727)
04-27 13:02:23.985: E/AndroidRuntime(11706):    at android.widget.LinearLayout.measureVertical(LinearLayout.java:812)
04-27 13:02:23.985: E/AndroidRuntime(11706):    at android.widget.LinearLayout.onMeasure(LinearLayout.java:553)
04-27 13:02:23.985: E/AndroidRuntime(11706):    at android.view.View.measure(View.java:12727)
04-27 13:02:23.985: E/AndroidRuntime(11706):    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4698)
04-27 13:02:23.985: E/AndroidRuntime(11706):    at android.widget.FrameLayout.onMeasure(FrameLayout.java:293)
04-27 13:02:23.985: E/AndroidRuntime(11706):    at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2092)
04-27 13:02:23.985: E/AndroidRuntime(11706):    at android.view.View.measure(View.java:12727)
04-27 13:02:23.985: E/AndroidRuntime(11706):    at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1089)
04-27 13:02:23.985: E/AndroidRuntime(11706):    at android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2467)
04-27 13:02:23.985: E/AndroidRuntime(11706):    at android.os.Handler.dispatchMessage(Handler.java:99)
04-27 13:02:23.985: E/AndroidRuntime(11706):    at android.os.Looper.loop(Looper.java:137)
04-27 13:02:23.985: E/AndroidRuntime(11706):    at android.app.ActivityThread.main(ActivityThread.java:4424)
04-27 13:02:23.985: E/AndroidRuntime(11706):    at java.lang.reflect.Method.invokeNative(Native Method)
04-27 13:02:23.985: E/AndroidRuntime(11706):    at java.lang.reflect.Method.invoke(Method.java:511)
04-27 13:02:23.985: E/AndroidRuntime(11706):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
04-27 13:02:23.985: E/AndroidRuntime(11706):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
04-27 13:02:23.985: E/AndroidRuntime(11706):    at dalvik.system.NativeStart.main(Native Method)
04-27 13:02:24.065: I/dalvikvm(11706): threadid=3: reacting to signal 3
04-27 13:02:24.065: I/dalvikvm(11706): Wrote stack traces to '/data/anr/traces.txt'
04-27 13:02:24.565: I/dalvikvm(11706): threadid=3: reacting to signal 3
04-27 13:02:24.565: I/dalvikvm(11706): Wrote stack traces to '/data/anr/traces.txt'
04-27 13:02:23.825:D/ViewRootImpl(11706):pckname=com.group.factor
4-27 13:02:23.875:D/dalvikvm(11706):释放92K的所有数据的GC_,4%的自由数据6645K/6851K,暂停24毫秒
04-27 13:02:23.885:I/dalvikvm堆(11706):为1495024字节分配将堆(frag案例)增长到7.985MB
4-27 13:02:23.935:D/dalvikvm(11706):GC_并发释放2K,3%释放8103K/8327K,暂停2ms+18ms
04-27 13:02:23.985:D/AndroidRuntime(11706):关闭虚拟机
04-27 13:02:23.985:W/dalvikvm(11706):threadid=1:线程退出时出现未捕获异常(组=0x40a4f1f8)
04-27 13:02:23.985:E/AndroidRuntime(11706):致命异常:主
04-27 13:02:23.985:E/AndroidRuntime(11706):java.lang.RuntimeException:无法生成本机字体
04-27 13:02:23.985:E/AndroidRuntime(11706):在android.graphics.Typeface.(Typeface.java:147)
04-27 13:02:23.985:E/AndroidRuntime(11706):在android.graphics.Typeface.createFromAsset(Typeface.java:121)上
04-27 13:02:23.985:E/AndroidRuntime(11706):位于com.group.factor.MainActivity$DummySectionFragment.onCreateView(MainActivity.java:179)
04-27 13:02:23.985:E/AndroidRuntime(11706):在android.support.v4.app.Fragment.performCreateView(Fragment.java:1460)上
04-27 13:02:23.985:E/AndroidRuntime(11706):在android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:911)
04-27 13:02:23.985:E/AndroidRuntime(11706):在android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1088)
04-27 13:02:23.985:E/AndroidRuntime(11706):在android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682)
04-27 13:02:23.985:E/AndroidRuntime(11706):在android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1444)
04-27 13:02:23.985:E/AndroidRuntime(11706):在android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:461)
04-27 13:02:23.985:E/AndroidRuntime(11706):在android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:141)
04-27 13:02:23.985:E/AndroidRuntime(11706):在android.support.v4.view.ViewPager.populate(ViewPager.java:1064)
04-27 13:02:23.985:E/AndroidRuntime(11706):在android.support.v4.view.ViewPager.populate(ViewPager.java:911)
04-27 13:02:23.985:E/AndroidRuntime(11706):在android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1432)
04-27 13:02:23.985:E/AndroidRuntime(11706):在android.view.view.measure(view.java:12727)
04-27 13:02:23.985:E/AndroidRuntime(11706):在android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4698)
04-27 13:02:23.985:E/AndroidRuntime(11706):在android.widget.FrameLayout.onMeasure(FrameLayout.java:293)
04-27 13:02:23.985:E/AndroidRuntime(11706):在android.view.view.measure(view.java:12727)
04-27 13:02:23.985:E/AndroidRuntime(11706):在android.widget.LinearLayout.measureVertical(LinearLayout.java:812)
04-27 13:02:23.985:E/AndroidRuntime(11706):在android.widget.LinearLayout.onMeasure(LinearLayout.java:553)
04-27 13:02:23.985:E/AndroidRuntime(11706):在android.view.view.measure(view.java:12727)
04-27 13:02:23.985:E/AndroidRuntime(11706):在android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4698)
04-27 13:02:23.985:E/AndroidRuntime(11706):在android.widget.FrameLayout.onMeasure(FrameLayout.java:293)
04-27 13:02:23.985:E/AndroidRuntime(11706):在com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2092)
04-27 13:02:23.985:E/AndroidRuntime(11706):在android.view.view.measure(view.java:12727)
04-27 13:02:23.985:E/AndroidRuntime(11706):在android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1089)
04-27 13:02:23.985:E/AndroidRuntime(11706):在android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2467)
04-27 13:02:23.985:E/AndroidRuntime(11706):在android.os.Handler.dispatchMessage(Handler.java:99)上
04-27 13:02:23.985:E/AndroidRuntime(11706):在android.os.Looper.loop(Looper.java:137)
04-27 13:02:23.985:E/AndroidRuntime(11706):位于android.app.ActivityThread.main(ActivityThread.java:4424)
04-27 13:02:23.985:E/AndroidRuntime(11706):位于java.lang.reflect.Method.Invokenactive(本机方法)
04-27 13:02:23.985:E/AndroidRuntime(11706):位于java.lang.reflect.Method.invoke(Method.java:511)
04-27 13:02:23.985:E/AndroidRuntime(11706):在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
04-27 13:02:23.985:E/AndroidRuntime(11706):位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
04-27 13:02:23.985:E/AndroidRuntime(11706):在dalvik.system.NativeStart.main(本机方法)
04-27 13:02:24.065:I/dalvikvm(11706):线程ID=3:对信号3作出反应
04-27 13:02:24.065:I/dalvikvm(11706):将堆栈跟踪写入“/data/anr/traces.txt”
04-27 13:02:24.565:I/dalvikvm(11706):线程ID=3:对信号3作出反应
04-27 13:02:24.565:I/dalvikvm(11706):将堆栈跟踪写入“/data/anr/traces.txt”
取自此处:

Android操作系统的此缺陷可能是您出现问题的原因:

Typeface.createFromAsset泄漏资产流

此bugreport中还有哪些解决方法:

这里提供了一种变通方法,使该方法不采用字体路径或格式。字体资源的完整路径必须作为参数提交。我还将对createFromAsset()的调用包装在一个try-catch块中,这样,如果找不到资产,get()方法将返回null

public class Typefaces {
private static final String TAG = "Typefaces";

 private static final Hashtable<String, Typeface> cache = new Hashtable<String, Typeface>();

 public static Typeface get(Context c, String assetPath) {
    synchronized (cache) {
        if (!cache.containsKey(assetPath)) {
            try {
                Typeface t = Typeface.createFromAsset(c.getAssets(),
                        assetPath);
                cache.put(assetPath, t);
            } catch (Exception e) {
                Log.e(TAG, "Could not get typeface '" + assetPath
                        + "' because " + e.getMessage());
                return null;
            }
        }
        return cache.get(assetPath);
    }
}
}

我的文件位于assets/fonts/blanch_caps.ttf中。

请向我们显示LogCat输出,但StackTrace除外。如果发生崩溃,请从LogCat发布堆栈跟踪。最有可能的是,“font”变量为null。或者
txt
可能为null对不起,我添加了log cat NO!不是!我测试了这个
Typeface phoneticFont = Typeface.createFromAsset(getAssets(),
                                         "blanch_caps.ttf");   
I changed to:

Typeface phoneticFont = Typeface.createFromAsset(getAssets(),
                                         "fonts/blanch_caps.ttf");