在 RecyclerView 适配器中设置自定义字体
Set custom font in RecyclerView adapter
我有一个加载 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;
}
}
我应该在适配器中的什么位置设置字体以及如何设置字体?
Where in my adapter should I set the font?
在 onCreateViewHolder()
或您的 ViewHolder
构造函数中。
So how should I get the font?
有了那个代码。在 Activity
(或片段,如果 RecyclerView
在片段中)中创建 Typeface
。将 Typeface
传递给 DiscoverRecyclerAdapter
。在 onCreateViewHolder()
中使用 Typeface
,直接使用或将其传递给 ViewHolder
构造函数。特别是,精确地创建 one Typeface
的实例,而不是每行一个。
这应该可以解决这个问题,将其添加到您的 recyclerviewadapter viewHolder 构造函数中
tf_regular = Typeface.createFromAsset(itemView.getContext().getAssets(), "fonts/BebasNeue Regular.ttf");
this.mainText.setTypeface(tf_regular);
加入onCreateViewHolder()
Typeface typeface = Typeface.createFromAsset(viewHolder.itemView.getContext().getAssets(), "font/Test.ttf");
viewHolder.TextView.setTypeface(typeface);
首先,这应该放在 CustomViewHolder 的构造函数中:
font = Typeface.createFromAsset(itemView.getContext().getAssets(), "fonts/BebasNeue Regular.ttf");
this.mainText.setTypeface(font);
除此之外,确保您的 "fonts" 文件夹在 "assets" 下,您的 "assets" 文件夹在您的 "main" 文件夹下(而不是"res").
我有一个加载 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;
}
}
我应该在适配器中的什么位置设置字体以及如何设置字体?
Where in my adapter should I set the font?
在 onCreateViewHolder()
或您的 ViewHolder
构造函数中。
So how should I get the font?
有了那个代码。在 Activity
(或片段,如果 RecyclerView
在片段中)中创建 Typeface
。将 Typeface
传递给 DiscoverRecyclerAdapter
。在 onCreateViewHolder()
中使用 Typeface
,直接使用或将其传递给 ViewHolder
构造函数。特别是,精确地创建 one Typeface
的实例,而不是每行一个。
这应该可以解决这个问题,将其添加到您的 recyclerviewadapter viewHolder 构造函数中
tf_regular = Typeface.createFromAsset(itemView.getContext().getAssets(), "fonts/BebasNeue Regular.ttf");
this.mainText.setTypeface(tf_regular);
加入onCreateViewHolder()
Typeface typeface = Typeface.createFromAsset(viewHolder.itemView.getContext().getAssets(), "font/Test.ttf");
viewHolder.TextView.setTypeface(typeface);
首先,这应该放在 CustomViewHolder 的构造函数中:
font = Typeface.createFromAsset(itemView.getContext().getAssets(), "fonts/BebasNeue Regular.ttf");
this.mainText.setTypeface(font);
除此之外,确保您的 "fonts" 文件夹在 "assets" 下,您的 "assets" 文件夹在您的 "main" 文件夹下(而不是"res").