Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/214.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为eche RecyclerView项目设置自定义字体_Java_Android_Fonts_Android Fonts - Fatal编程技术网

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);
    
    
    }