代码之家  ›  专栏  ›  技术社区  ›  newbieCoder.pkg

无法在ViewHolder内设置自定义字体

  •  -1
  • newbieCoder.pkg  · 技术社区  · 8 年前

    我已经尝试了在stackoverflow上可以找到的一切,但似乎没有任何效果。

    问题是我无法更改CardViewLayout中任何TextView的字体。

    我尝试了xml中的字体系列和文本外观 我通过这样做改变了它,但我得到了错误 无法解析符号“itemView”

    代码:

    public class cardAdapter extends ArrayAdapter<cardModel> {
    
    public cardAdapter(Context context) {
        super(context, 0);
    }
    
    @Override
    public View getView(int position, View contentView, ViewGroup parent) {
        ViewHolder holder;
    
        if (contentView == null) {
            LayoutInflater inflater = LayoutInflater.from(getContext());
            contentView = inflater.inflate(R.layout.card_layout, parent, false);
            holder = new ViewHolder(contentView);
            contentView.setTag(holder);
        } else {
            holder = (ViewHolder) contentView.getTag();
        }
    
        cardModel spot = getItem(position);
    
        holder.title.setText(spot.title);
        holder.description.setText(spot.description);
        Glide.with(getContext()).load(spot.url).into(holder.image);
    
        return contentView;
    }
    
    private static class ViewHolder {
    
        public TextView title;
        public TextView description;
        public ImageView image;
    
        Typeface customTypeOne = Typeface.createFromAsset(itemView.getContext().getAssets(), "fonts/typefaceone.ttf");
    
        public ViewHolder(View view) {
            this.title = (TextView) view.findViewById(R.id.title);
            title.setTypeface(customTypeOne);
            this.description = (TextView) view.findViewById(R.id.description);
            this.image = (ImageView) view.findViewById(R.id.image);
            }
        }
    }
    
    1 回复  |  直到 8 年前
        1
  •  0
  •   CommonsWare    8 年前

    但我发现错误无法解析符号“itemView”

    那是因为你没有任何 itemView 。

    首先,更换:

    Typeface customTypeOne = Typeface.createFromAsset(itemView.getContext().getAssets(), "fonts/typefaceone.ttf");
    

    使用:

    Typeface customTypeOne;
    

    然后,在你的 ViewHolder 构造函数,在底部添加:

    customTypeOne = Typeface.createFromAsset(this.title.getContext().getAssets(), "fonts/typefaceone.ttf");
    

    现在您正在呼叫 getContext() 在存在的东西上。