在RecyclerView适配器中设置自定义字体

4

我有一个加载RecyclerView的碎片,但我想在RecyclerView的其中一个项目中的TextView中添加自定义字体。在适配器的哪个位置应该设置字体?另外,如何设置字体?

我不能使用这段代码,

Typeface font = Typeface.createFromAsset((getAssets(),
            "myfont.ttf");

因为我不在Activity中。那么我该如何获取字体?

这是我的适配器,

public class DiscoverRecyclerAdapter
        extends RecyclerView.Adapter<DiscoverRecyclerAdapter.ViewHolder> {

    private String[] mDataset;

    public static class ViewHolder extends RecyclerView.ViewHolder {
        public TextView mText;
        public ViewHolder(android.support.v7.widget.CardView v) {
            super(v);
            mText = (TextView) v.findViewById(R.id.text);
        }
    }

    public DiscoverRecyclerAdapter(String[] myDataset) {
        mDataset = myDataset;
    }

    @Override
    public DiscoverRecyclerAdapter.ViewHolder onCreateViewHolder(ViewGroup parent,
                                                   int viewType) {
        View v = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.item_discover, parent, false);
        ViewHolder vh = new ViewHolder((android.support.v7.widget.CardView)v);
        return vh;
    }

    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
        holder.mText.setText(mDataset[position]);
    }

    @Override
    public int getItemCount() {
        return mDataset.length;
    }
}

我应该在适配器的哪里设置字体,如何设置字体?

4个回答

8

我应该在适配器的哪里设置字体?

可以在 onCreateViewHolder() 或者你的 ViewHolder 构造函数中设置。

那么我应该如何获取字体呢?

使用以下代码。在 Activity(或者如果 RecyclerView 在一个 fragment 中则在 fragment 中)中创建 Typeface,然后将其传入 DiscoverRecyclerAdapter。在 onCreateViewHolder() 中使用这个 Typeface,要么直接使用,要么将其传递给 ViewHolder 构造函数。特别地,只需创建一个 Typeface 实例,而不是每行都创建一个。


6

这应该可以解决问题,将此添加到您的RecyclerViewAdapter ViewHolder构造函数中

tf_regular = Typeface.createFromAsset(itemView.getContext().getAssets(), "fonts/BebasNeue Regular.ttf");
            this.mainText.setTypeface(tf_regular);

0

首先,这应该放在CustomViewHolder的构造函数中:

font = Typeface.createFromAsset(itemView.getContext().getAssets(), "fonts/BebasNeue Regular.ttf");
this.mainText.setTypeface(font);

除此之外,请确保您的“字体”文件夹位于“资产”文件夹下,而您的“资产”文件夹位于您的“主要”文件夹下(而不是“资源”文件夹)。

在哪里提到了? - O.O.Balance
应该将其放置在CustomViewHolders的构造函数内部,就在代码块的右侧 :) - Tiferet Cohen

0

在onCreateViewHolder()中添加。

Typeface typeface = Typeface.createFromAsset(viewHolder.itemView.getContext().getAssets(), "font/Test.ttf");
    viewHolder.TextView.setTypeface(typeface);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接