Android Kotlin:如何修改ListView中的自定义字体?
如何修改Android ListView中的字体?
嘿,我懂你翻了好多资料都没找到合适方案的郁闷——ListView的字体修改确实不像单个TextView那样直接改属性就行,不过别慌,我给你两种实用的解决办法,跟着步骤来就能搞定!
方案一:自定义列表项布局+Adapter(最灵活推荐)
这种方法能完全掌控列表项的样式,包括字体、间距、颜色等,是最常用的方案。
创建自定义列表项布局
先在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/字体文件名引用即可。自定义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; } }在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
相关产品推荐
相关产品推荐

