Java 为eche RecyclerView项目设置自定义字体
我使用Java 为eche RecyclerView项目设置自定义字体,java,android,fonts,android-fonts,Java,Android,Fonts,Android Fonts,我使用RecyclerView和cardwiew并希望在其中一个RecyclerView项目中的TextView中添加自定义字体 我应该在适配器中的何处设置字体 另外,我如何准确设置字体 例如:在项目1中设置durgent.ttf,在项目2中设置“Fenwick.ttf” 这是我的适配器。java: public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> { public List&
RecyclerView
和cardwiew
并希望在其中一个RecyclerView
项目中的TextView
中添加自定义字体
项目1中设置durgent.ttf,在项目2中设置“Fenwick.ttf”
这是我的适配器。java
:
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
public List<RecyclerItem> listItems;
private Context mContext;
public MyAdapter(List<RecyclerItem> listItems, Context mContext) {
this.listItems = listItems;
this.mContext = mContext;
}
@Override
public ViewHolder onCreateViewHolder(final ViewGroup parent, int viewType) {
final View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.recycler_item, parent, false);
final ViewHolder holder = new ViewHolder(view);
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final int position = holder.getAdapterPosition();
// if (position == 0) {
Toast.makeText(mContext, listItems.get(position).getTitle(),Toast.LENGTH_SHORT).show();
/*
}
if (position == 1) {
Toast.makeText(mContext,"Android",Toast.LENGTH_SHORT).show();
}
*/
}
});
return holder;
}
@Override
public void onBindViewHolder(final ViewHolder holder, final int position) {
final RecyclerItem itemList = listItems.get(position);
holder.txtTitle.setText(itemList.getTitle());
holder.txtDescription.setText(itemList.getDescription());
holder.txtOptionDigit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//Display option menu
PopupMenu popupMenu = new PopupMenu(mContext, holder.txtOptionDigit);
popupMenu.inflate(R.menu.option_menu);
popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
switch (item.getItemId()) {
case R.id.mnu_item_save:
Toast.makeText(mContext, "Saved " + listItems.get(position).getTitle(), Toast.LENGTH_SHORT).show();
break;
case R.id.mnu_item_delete:
//Delete item
Toast.makeText(mContext, "Deleted " + listItems.get(position).getTitle(), Toast.LENGTH_SHORT).show();
listItems.remove(position);
notifyDataSetChanged();
break;
default:
break;
}
return false;
}
});
popupMenu.show();
}
});
}
@Override
public int getItemCount() {
return listItems.size();
}
public class ViewHolder extends RecyclerView.ViewHolder{
public TextView txtTitle;
public TextView txtDescription;
public TextView txtOptionDigit;
public ViewHolder(View itemView) {
super(itemView);
txtTitle = (TextView) itemView.findViewById(R.id.txtTitle);
txtDescription = (TextView) itemView.findViewById(R.id.txtDescription);
txtOptionDigit = (TextView) itemView.findViewById(R.id.txtOptionDigit);
}
}
}
公共类MyAdapter扩展了RecyclerView.Adapter{
公共物品清单;
私有上下文;
公共MyAdapter(列表项、上下文mContext){
this.listItems=listItems;
this.mContext=mContext;
}
@凌驾
public ViewHolder onCreateViewHolder(最终视图组父级,int-viewType){
最终视图=LayoutInflater.from(parent.getContext()).flate(R.layout.recycler_项,parent,false);
最终视图持有者=新视图持有者(视图);
view.setOnClickListener(新的view.OnClickListener(){
@凌驾
公共void onClick(视图v){
最终int位置=holder.getAdapterPosition();
//如果(位置==0){
Toast.makeText(mContext,listItems.get(position).getTitle(),Toast.LENGTH_SHORT).show();
/*
}
如果(位置==1){
Toast.makeText(mContext,“Android”,Toast.LENGTH_SHORT.show();
}
*/
}
});
报税表持有人;
}
@凌驾
公共无效onBindViewHolder(最终视图持有人,最终整型位置){
最终RecyclerItemList=listItems.get(位置);
holder.txtitle.setText(itemList.getTitle());
holder.txtDescription.setText(itemList.getDescription());
holder.txtOptionDigit.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
//显示选项菜单
PopupMenu PopupMenu=新的PopupMenu(mContext,holder.txtOptionDigit);
弹出菜单。充气(右菜单。选项菜单);
setOnMenuItemClickListener(新的popupMenu.OnMenuItemClickListener(){
@凌驾
公共布尔onMenuItemClick(菜单项){
开关(item.getItemId()){
案例R.id.mnu\u项目保存:
Toast.makeText(mContext,“Saved”+listItems.get(position.getTitle(),Toast.LENGTH_SHORT.show();
打破
案例R.id.mnu项目删除:
//删除项目
Toast.makeText(mContext,“Deleted”+listItems.get(position.getTitle(),Toast.LENGTH_SHORT.show();
列表项。删除(位置);
notifyDataSetChanged();
打破
违约:
打破
}
返回false;
}
});
show();
}
});
}
@凌驾
public int getItemCount(){
返回listItems.size();
}
公共类ViewHolder扩展了RecyclerView.ViewHolder{
公共文本视图txtTitle;
公共文本视图txtDescription;
公共文本视图txtOptionDigit;
公共视图持有者(视图项视图){
超级(项目视图);
txtTitle=(TextView)itemView.findViewById(R.id.txtTitle);
txtDescription=(TextView)itemView.findViewById(R.id.txtDescription);
txtOptionDigit=(TextView)itemView.findViewById(R.id.txtOptionDigit);
}
}
}
按照Android文档中的描述设置字体系列
<?xml version="1.0" encoding="utf-8"?>
<font-family xmlns:android="http://schemas.android.com/apk/res/android">
<font
android:fontStyle="normal"
android:fontWeight="400"
android:font="@font/lobster_regular" />
<font
android:fontStyle="italic"
android:fontWeight="400"
android:font="@font/lobster_italic" />
</font-family>
将字体系列应用于文本视图
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="@font/lobster"/>
创建具有两个不同项目的回收器视图,例如,
FontViewHolder(在此CardView中包括启用字体的TextView)&NormalViewHolder,根据条件,您可以使用特定的ViewHolder。例如
public class YourAdapater extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private static final int FONT_ITEM_TYPE = 0x01;
private static final int DEFAULT_ITEM_TYPE = 0x02;
private List<RecyclerItem> listItems;
public YourAdapater(List<RecyclerItem> listItems) {
this.listItems = listItems;
}
@Override
public int getItemCount() {
return listItems.size();
}
@Override
public int getItemViewType(int position) {
if (position == 0) {
return FONT_ITEM_TYPE; // constant say 0x01
}
return DEFAULT_ITEM_TYPE; // constant say 0x02
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
final LayoutInflater inflater = LayoutInflater.from(parent.getContext());
if (viewType == FONT_ITEM_TYPE) {
// inflate and return FontViewHolder
final View view = inflater.inflate(R.layout.recycler_item_font, parent, false);
return new FontViewHolder(view);
} else {
// inflate and return NormalViewHolder
final View view = inflater.inflate(R.layout.recycler_item_normal, parent, false);
return new NormalViewHolder(view);
}
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
if (position == 0) {
FontViewHolder vh = (FontViewHolder) holder;
vh.bind(listItems.get(position));
} else {
NormalViewHolder vh = (NormalViewHolder) holder;
vh.bind(listItems.get(position));
}
}
public static class NormalViewHolder extends RecyclerView.ViewHolder {
public TextView txtTitle;
public TextView txtDescription;
public TextView txtOptionDigit;
private RecyclerItem item;
public NormalViewHolder(View itemView) {
super(itemView);
txtTitle = (TextView) itemView.findViewById(R.id.txtTitle);
txtDescription = (TextView) itemView.findViewById(R.id.txtDescription);
txtOptionDigit = (TextView) itemView.findViewById(R.id.txtOptionDigit);
itemView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// click action on item
if (item != null) {
Toast.makeText(itemView.getContext(), item.getTitle(), Toast.LENGTH_SHORT).show();
}
}
});
}
public void bind(RecyclerItem item) {
this.item = item;
// do data binding
txtTitle.setText(item.getTitle());
txtDescription.setText(item.getDescription());
}
}
public static class FontViewHolder extends RecyclerView.ViewHolder {
public FontViewHolder(View itemView) {
super(itemView);
itemView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// click action on item
}
});
}
public void bind(RecyclerItem data) {
// do data binding
}
}
}
公共类YourAdapter扩展了RecyclerView.Adapter{
私有静态最终整型字体项目类型=0x01;
私有静态final int DEFAULT_ITEM_TYPE=0x02;
私人物品清单;
公共YourAdapter(列表项){
this.listItems=listItems;
}
@凌驾
public int getItemCount(){
返回listItems.size();
}
@凌驾
public int getItemViewType(int位置){
如果(位置==0){
返回FONT\u ITEM\u TYPE;//常量为0x01
}
返回默认的\u项\u类型;//常量为0x02
}
@凌驾
public ViewHolder onCreateViewHolder(视图组父级,int-viewType){
最终LayoutFlater充气器=LayoutFlater.from(parent.getContext());
如果(视图类型==字体项目类型){
//充气并放回支架
最终视图=充气机。充气(R.layout.recycler\u item\u字体,父项,false);
返回新的FontViewHolder(视图);
}否则{
//充气并返回正常的视图保持架
最终视图=充气机。充气(R.layout.recycler\u item\u normal,parent,false);
返回新的NormalViewHolder(视图);
}
}
@凌驾
公共无效onBindViewHolder(ViewHolder,int位置){
如果(位置==0){
FontViewHolder vh=(FontViewHolder)支架;
vh.bind(listItems.get(position));
}否则{
NormalViewHolder vh=(NormalViewHolder)支架;
vh.bind(listItems.get(position));
}
}
公共静态类NormalViewHolder扩展了RecyclerView.ViewHolder{
公共文本视图txtTitle;
公共文本视图txtDescription;
公共文本视图txtOptionDigit;
私人回收项目;
公共NormalViewHolder(视图项视图){
超级(项目视图);
txtTitle=(TextView)itemView.findViewById(R.id.txtTitle);
txtDescription=(TextView)itemView.findViewBy
@Override
public void onBindViewHolder(final ViewHolder holder, final int position) {
Typeface font1= Typeface.createFromAsset(context.getAssets(), "Durwent.ttf");
Typeface font2= Typeface.createFromAsset(context.getAssets(), "Fenwick.ttf");
}
// you can apply font position wise
if (position == 0) {
//set font 1
textView.setTypeface(font1);
}
if (position == 1){
//set font 2
textView.setTypeface(font2);
}
--------------or-----------------
if (position % 2 == 0) {
//set font 1
textView.setTypeface(font1);
} else {
//set font 2
textView.setTypeface(font2);
}
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
MyHolder myHolder = (MyHolder)holder;
Current current = currentList.get(position);
myHolder.textDescription.setText(current.getDescription());
myHolder.textTitle.setText(current.getTitle());
myHolder.textSource.setText(current.getRelease_date());
myHolder.textType.setText(current.getContent_type());
Typeface font1 = Typeface.createFromAsset(context.getAssets(), "myFirstFont.ttf");
Typeface font2 = Typeface.createFromAsset(context.getAssets(), "mySecondFont.ttf");
if(position % 2 ==0 )
{
myHolder.textDescription.setTypeface(font1);
}else
myHolder.textDescription.setTypeface(font2);
}