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

Android Kotlin:如何修改ListView中的自定义字体?

如何修改Android ListView中的字体?

嘿,我懂你翻了好多资料都没找到合适方案的郁闷——ListView的字体修改确实不像单个TextView那样直接改属性就行,不过别慌,我给你两种实用的解决办法,跟着步骤来就能搞定!

方案一:自定义列表项布局+Adapter(最灵活推荐)

这种方法能完全掌控列表项的样式,包括字体、间距、颜色等,是最常用的方案。

  1. 创建自定义列表项布局
    先在res/layout目录下新建一个list_item.xml文件,里面放一个TextView,直接在XML里设置字体:

    <!-- res/layout/list_item.xml -->
    <TextView
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/item_text"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:padding="16dp"
        android:textSize="16sp"
        android:fontFamily="@font/your_custom_font" <!-- 引用自定义字体 -->
        android:textColor="#333333" />
    

    注意:如果用自定义字体,需要先把.ttf或.otf格式的字体文件放到res/font目录下(没有这个目录就新建一个),然后用@font/字体文件名引用即可。

  2. 自定义Adapter绑定布局
    写一个继承自ArrayAdapter或BaseAdapter的自定义适配器,把数据和布局绑定起来:

    public class CustomFontAdapter extends ArrayAdapter<String> {
        private Context mContext;
        private List<String> mDataList;
    
        public CustomFontAdapter(Context context, List<String> data) {
            super(context, R.layout.list_item, data);
            mContext = context;
            mDataList = data;
        }
    
        @NonNull
        @Override
        public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
            ViewHolder holder;
            // 复用View提升性能
            if (convertView == null) {
                convertView = LayoutInflater.from(mContext).inflate(R.layout.list_item, parent, false);
                holder = new ViewHolder();
                holder.itemText = convertView.findViewById(R.id.item_text);
                // 也可以在这里用代码设置字体(替代XML的fontFamily)
                // Typeface typeface = Typeface.createFromAsset(mContext.getAssets(), "fonts/your_custom_font.ttf");
                // holder.itemText.setTypeface(typeface);
                convertView.setTag(holder);
            } else {
                holder = (ViewHolder) convertView.getTag();
            }
            // 设置列表项文本
            holder.itemText.setText(mDataList.get(position));
            return convertView;
        }
    
        // ViewHolder优化
        private static class ViewHolder {
            TextView itemText;
        }
    }
    
  3. 在Activity中设置Adapter
    最后回到你的Activity代码里,给ListView绑定这个自定义Adapter:

    ListView drinkListView = findViewById(R.id.tvListDrinki);
    // 示例数据,替换成你自己的数据源
    List<String> drinkData = Arrays.asList("可乐", "雪碧", "橙汁", "冰美式");
    CustomFontAdapter adapter = new CustomFontAdapter(this, drinkData);
    drinkListView.setAdapter(adapter);
    

方案二:直接修改系统默认布局的字体

如果你不想自定义布局,想用系统自带的android.R.layout.simple_list_item_1这类布局,可以在Adapter的getView方法里直接获取TextView并修改字体:

ListView drinkListView = findViewById(R.id.tvListDrinki);
List<String> drinkData = Arrays.asList("可乐", "雪碧", "橙汁", "冰美式");

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, drinkData) {
    @NonNull
    @Override
    public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
        View itemView = super.getView(position, convertView, parent);
        // 获取系统布局里的TextView
        TextView textView = itemView.findViewById(android.R.id.text1);
        // 设置自定义字体
        Typeface customFont = Typeface.createFromAsset(getAssets(), "fonts/your_custom_font.ttf");
        textView.setTypeface(customFont);
        // 还可以顺便修改字体大小、颜色
        textView.setTextSize(18sp);
        textView.setTextColor(Color.parseColor("#666666"));
        return itemView;
    }
};

drinkListView.setAdapter(adapter);

小提示:如果你的项目是Android 8.0(API 26)及以上版本,用fontFamily属性会更简洁;如果是更低版本,建议用代码加载字体文件的方式,兼容性更好。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:32:36