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

Android 在RecyclerView适配器中设置自定义字体,android,fonts,android-adapter,Android,Fonts,Android Adapter,我有一个片段加载了一个RecyclerView,但我想在其中一个RecyclerView项中的TextView中添加一个自定义字体。我应该在适配器中的何处设置字体?另外,我如何准确设置字体 我不能用这个密码 Typeface font = Typeface.createFromAsset((getAssets(), "myfont.ttf"); 因为我没有参加活动。那么我应该如何获得字体呢 这是我的适配器 public class DiscoverRecyclerAda

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

我不能用这个密码

Typeface font = Typeface.createFromAsset((getAssets(),
            "myfont.ttf");
因为我没有参加活动。那么我应该如何获得字体呢

这是我的适配器

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;
    }
}
公共类DiscoveryRecyclerAdapter
扩展RecyclerView.Adapter{
私有字符串[]mDataset;
公共静态类ViewHolder扩展了RecyclerView.ViewHolder{
公共文本查看多行文本;
公共视图持有者(android.support.v7.widget.cardwiew v){
超级(五);
mText=(TextView)v.findViewById(R.id.text);
}
}
公共DiscoveryRecyclerAdapter(字符串[]myDataset){
mDataset=myDataset;
}
@凌驾
public DiscoveryRecyclerAdapter.ViewHolder onCreateViewHolder(视图组父级、,
int视图类型){
视图v=LayoutInflater.from(parent.getContext())
.充气(R.layout.item_discover,parent,false);
ViewHolder vh=新的ViewHolder((android.support.v7.widget.CardView)v);
返回vh;
}
@凌驾
公共无效onBindViewHolder(ViewHolder,int位置){
holder.mText.setText(mDataset[position]);
}
@凌驾
public int getItemCount(){
返回mDataset.length;
}
}
我应该在适配器中的何处设置字体,以及如何设置字体

我应该在适配器中的何处设置字体

onCreateViewHolder()
中或在
ViewHolder
构造函数中

那么我应该如何获得字体呢


用那个密码。在
活动
中创建
字体
(或片段,如果
回收视图
在片段中)。将
字体
传递到
DiscoveryRecyclerAdapter
。直接使用
onCreateViewHolder()
中的
字体,或将其传递给
ViewHolder
构造函数。特别是,精确地创建一个
字体的实例,而不是每行一个。

这将解决此问题,并将其添加到您的RecycleServiceAdapter viewHolder构造函数中

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


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

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

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

如代码块中提到的位置:)应放在CustomViewHolders的构造函数中
font = Typeface.createFromAsset(itemView.getContext().getAssets(), "fonts/BebasNeue Regular.ttf");
this.mainText.setTypeface(font);