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

时间:2017-09-11 04:45:16

标签: java android expandablelistview

我想用自定义字体更改recycleview中'item'的字体。有谁可以帮我这个?我设法使用

更改标题的字体
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中的项目做这件事。

以下是我的适配器的java代码: -

    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 个答案:

答案 0 :(得分:3)

全局定义字体路径和字体

 Typeface typeface;

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

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

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

在您的BindViewHolder

holder.itemTextView.setTypeface(typeface);