代码之家  ›  专栏  ›  技术社区  ›  Tan Kahseng

使用自定义字体更改recycleview中的文本

  •  4
  • Tan Kahseng  · 技术社区  · 7 年前

    我想用自定义字体在recycleview中更改我的“项目”的字体。有人能帮我吗?我通过使用更改标题的字体

    header_title = (TextView) itemView.findViewById(R.id.header_title); 
    

    Typeface face_01 = Typeface.createFromAsset(itemView.getContext().getAssets(), "customfont/grb.otf");
     header_title.setTypeface(face_01);
    

    但我不知道如何对arraylist中的项执行此操作。

        public class ExpandableListAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
            public static final int HEADER = 0;
            public static final int CHILD = 1;
    
            private List<Item> data;
    
            public ExpandableListAdapter(List<Item> data) {
                this.data = data;
            }
    
            @Override
            public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int type) {
                View view = null;
                Context context = parent.getContext();
                float dp = context.getResources().getDisplayMetrics().density;
                int subItemPaddingLeft = (int) (18 * dp);
                int subItemPaddingTopAndBottom = (int) (5 * dp);
                switch (type) {
                    case HEADER:
                        LayoutInflater inflater = (LayoutInflater) parent.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                        view = inflater.inflate(R.layout.list_header, parent, false);
                        ListHeaderViewHolder header = new ListHeaderViewHolder(view);
                        return header;
                    case CHILD:
                        TextView itemTextView = new TextView(context);
                        itemTextView.setPadding(subItemPaddingLeft, subItemPaddingTopAndBottom, 0, subItemPaddingTopAndBottom);
                        itemTextView.setTextColor(0x88000000);
                        itemTextView.setLayoutParams(
                                new ViewGroup.LayoutParams(
                                        ViewGroup.LayoutParams.MATCH_PARENT,
                                        ViewGroup.LayoutParams.WRAP_CONTENT));
                        return new RecyclerView.ViewHolder(itemTextView) {
                        };
                }
                return null;
            }
    
            public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
                final Item item = data.get(position);
                switch (item.type) {
                    case HEADER:
                        final ListHeaderViewHolder itemController = (ListHeaderViewHolder) holder;
                        itemController.refferalItem = item;
                        itemController.header_title.setText(item.text);
                        if (item.invisibleChildren == null) {
                            itemController.btn_expand_toggle.setImageResource(R.drawable.circle_minus);
                        } else {
                            itemController.btn_expand_toggle.setImageResource(R.drawable.circle_plus);
                        }
                        itemController.btn_expand_toggle.setOnClickListener(new View.OnClickListener() {
                            @Override
                            public void onClick(View v) {
                                if (item.invisibleChildren == null) {
                                    item.invisibleChildren = new ArrayList<Item>();
                                    int count = 0;
                                    int pos = data.indexOf(itemController.refferalItem);
                                    while (data.size() > pos + 1 && data.get(pos + 1).type == CHILD) {
                                        item.invisibleChildren.add(data.remove(pos + 1));
                                        count++;
                                    }
                                    notifyItemRangeRemoved(pos + 1, count);
                                    itemController.btn_expand_toggle.setImageResource(R.drawable.circle_plus);
                                } else {
                                    int pos = data.indexOf(itemController.refferalItem);
                                    int index = pos + 1;
                                    for (Item i : item.invisibleChildren) {
                                        data.add(index, i);
                                        index++;
                                    }
                                    notifyItemRangeInserted(pos + 1, index - pos - 1);
                                    itemController.btn_expand_toggle.setImageResource(R.drawable.circle_minus);
                                    item.invisibleChildren = null;
                                }
                            }
                        });
                        break;
                    case CHILD:
                        TextView itemTextView = (TextView) holder.itemView;
                        itemTextView.setText(data.get(position).text);
                        break;
                }
            }
    
            @Override
            public int getItemViewType(int position) {
                return data.get(position).type;
            }
    
            @Override
            public int getItemCount() {
                return data.size();
            }
    
            private static class ListHeaderViewHolder extends RecyclerView.ViewHolder {
                public TextView header_title;
                public ImageView btn_expand_toggle;
                public Item refferalItem;
    
                public ListHeaderViewHolder(View itemView) {
                    super(itemView);
                    header_title = (TextView) itemView.findViewById(R.id.header_title);
                    btn_expand_toggle = (ImageView) itemView.findViewById(R.id.btn_expand_toggle);
    
                    Typeface face_01 = Typeface.createFromAsset(itemView.getContext().getAssets(), "customfont/grb.otf");
                    header_title.setTypeface(face_01);
                }
            }
    
            public static class Item {
                public int type;
                public String text;
                public List<Item> invisibleChildren;
    
                public Item() {
                }
    
                public Item(int type, String text) {
                    this.type = type;
                    this.text = text;
                }
            }
        }
    
    1 回复  |  直到 7 年前
        1
  •  3
  •   Shashwat Gupta    7 年前

    全局定义字体路径和字体

     Typeface typeface;
    
    String fontpath = "fonts/KaushanScript-Regular.otf";
    

    在您的构造函数中执行以下操作

    public ExpandableListAdapter(Context context,List<Item> data) {
    typeface = Typeface.createFromAsset(context.getAssets(), fontpath);
                this.data = data;
            }
    

    holder.itemTextView.setTypeface(typeface);