You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Fragment中实现自定义字体的技术问询

在Android Fragment中设置自定义字体的完整解决方案

看起来你已经在尝试给Fragment里的TextView配置自定义字体了,我来帮你补全代码并梳理正确的实现方式,避开常见的坑点:

首先,先确认你的字体文件路径是否正确:需要把字体文件(比如IRANSans.ttf)放在项目的src/main/assets/fonts/目录下,如果fonts文件夹不存在就新建一个,注意文件名的大小写要和代码里完全一致。

接下来是完整的Fragment代码实现:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View rootView = inflater.inflate(R.layout.fragment_home, container, false);
    
    // 初始化控件
    mRecyclerView = rootView.findViewById(R.id.recycler_view);
    TextView idTextView = rootView.findViewById(R.id.count);
    TextView cateNameTextView = rootView.findViewById(R.id.title);
    
    // 设置自定义字体
    if (getActivity() != null) {
        try {
            // 替换为你的完整字体文件名
            Typeface iranSansTypeface = Typeface.createFromAsset(getActivity().getAssets(), "fonts/IRANSans.ttf");
            // 给目标TextView设置字体
            idTextView.setTypeface(iranSansTypeface);
            cateNameTextView.setTypeface(iranSansTypeface);
        } catch (Exception e) {
            // 捕获字体加载失败的异常,避免App崩溃
            e.printStackTrace();
        }
    }
    
    return rootView;
}

几个关键注意点:

  • getActivity()判空:Fragment可能在生命周期的某些阶段脱离Activity,直接调用getActivity().getAssets()会触发空指针异常,一定要加非空判断。
  • 异常捕获:如果字体文件路径错误、文件损坏,createFromAsset会抛出异常,捕获它既能避免崩溃,也方便排查问题。
  • 复用优化:如果多个页面都需要用这款字体,建议封装成工具类减少重复加载:
public class TypefaceUtils {
    private static Typeface sIranSansTypeface;
    
    public static Typeface getIranSansTypeface(Context context) {
        if (sIranSansTypeface == null) {
            try {
                sIranSansTypeface = Typeface.createFromAsset(context.getAssets(), "fonts/IRANSans.ttf");
            } catch (Exception e) {
                e.printStackTrace();
                // 加载失败时返回系统默认字体兜底
                return Typeface.DEFAULT;
            }
        }
        return sIranSansTypeface;
    }
}

之后在Fragment里直接调用即可:

Typeface typeface = TypefaceUtils.getIranSansTypeface(getActivity());
idTextView.setTypeface(typeface);

常见问题排查:

  • 字体不显示:检查字体文件是否真的在assets/fonts/目录下,文件名是否和代码里完全匹配(包括大小写);
  • 空指针异常:可以把控件初始化和字体设置移到onViewCreated方法里,这个方法会在Fragment的View创建完成且Activity已绑定后执行,更安全。

内容的提问来源于stack exchange,提问作者majid paran

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 06:48:32