【问题标题】:How to set custom font for RecyclerView items如何为 RecyclerView 项目设置自定义字体
【发布时间】:2018-09-04 13:05:37
【问题描述】:

我是 android 的初学者。我通过解析 JSON 数据创建了一个RecyclerView。我想在 RecyclerView 项目中自定义这个 TextView 字体。我尝试了很多方法,但它对我不起作用。我想在RecyclerView 项目的文本视图中将自定义字体设置为我的字体。请帮我 我的适配器代码:

public class ExampleAdapter extends RecyclerView.Adapter <ExampleAdapter.ExampleViewHolder>{
    private Context mContext;
    private ArrayList<ExampleItem> mExampleList;
    private onItemClickListener mListener;
    public interface onItemClickListener{
        void onItemClick(int position);
    }

    public void setOnItemClickListener(onItemClickListener listener){
        mListener = listener;
    }
    public ExampleAdapter(Context context, ArrayList<ExampleItem> examplelist){
        mContext =context;
        mExampleList = examplelist;
    }


    @NonNull
    @Override
    public ExampleViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
       View v = LayoutInflater.from(mContext).inflate(R.layout.example_item,parent,false);
       return new ExampleViewHolder(v);
    }

    @Override
    public void onBindViewHolder(@NonNull ExampleViewHolder holder, int position) {
        ExampleItem currentItem = mExampleList.get(position);
        String imageUrl = currentItem.getmImageUrl();
        String creatorName = currentItem.getmCreator();
        String cat =currentItem.getmCat();

        holder.mTextViewCreator.setText(creatorName);
        holder.mTextViewCat.setText(cat);
        Glide.with(mContext)
                .load(imageUrl)
                .into(holder.mImageView);
    }

    @Override
    public int getItemCount() {
        return mExampleList.size();
    }

    public class ExampleViewHolder extends RecyclerView.ViewHolder{
public ImageView mImageView;
public TextView mTextViewCreator;
public TextView mTextViewCat;
        public ExampleViewHolder(View itemView) {
            super(itemView);
            mImageView = itemView.findViewById(R.id.image_view);
            mTextViewCreator = itemView.findViewById(R.id.text_view_creator);
            mTextViewCat = itemView.findViewById(R.id.text_view_cat);
            itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    if(mListener != null){
                        int position = getAdapterPosition();
                        if (position !=RecyclerView.NO_POSITION){
                            mListener.onItemClick(position);
                        }
                    }
                }
            });
        }
    }
}

【问题讨论】:

    标签: android android-fonts


    【解决方案1】:

    将字体的 .ttf 文件放在项目的 res/font 文件夹中,然后使用 fontFamily 属性在 xml 布局中使用它,例如:

    <TextView
      android:id="@+id/yourTextView"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:fontFamily="@font/your_font_name"/>
    

    参考这里:https://developer.android.com/guide/topics/ui/look-and-feel/fonts-in-xml

    【讨论】:

      【解决方案2】:

      首先,您需要在名为 fonts 的资产中创建一个文件夹,并将您自己的字体放入其中。像这样

      然后,您可以像这样使用 setTypeface() 方法(在您的 onBindViewHolder() 方法中添加此代码)

      AssetManager am = getContext().getApplicationContext().getAssets();
      Typeface typeface = Typeface.createFromAsset(am, "fonts/Raleway-Medium.ttf");
      holder.mTextViewCreator.setTypeface(typeface);
      holder.mTextViewCat.setTypeface(typeface);
      

      【讨论】:

        【解决方案3】:

        要在 TextView 中使用特定字体,您需要在 assets 中创建一个名为“fonts”的文件夹

        您可以使用自定义字体将字体设置为 TextView,如下所示:

        TextView txt = (TextView) findViewById(R.id.custom_font);
        Typeface font = Typeface.createFromAsset(getAssets(), "Chantelli_Antiqua.ttf");
        txt.setTypeface(font);
        

        但是如果你想在更多视图中使用自定义字体,好的方法是创建你自己的 TextView 并设置字体并在不同的布局中使用它以避免重复上面的代码。

        【讨论】:

          【解决方案4】:

          您可以尝试在设计选项卡中添加 android studio 中可用的默认 Google 字体。你可以搜索 fontFamily 然后点击更多字体。这样字体将自动添加到 XMl 中。它适用于 17enter image description here 以上的 API 级别

          【讨论】:

            【解决方案5】:

            Android 8.0(API 级别 26)引入了一项新功能,XML 中的字体docs

            布局:

             <TextView
                android:id="@+id/tv_title"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:fontFamily="@font/gotham_htf_book"
                android:text="@string/title" />
            

            【讨论】:

              猜你喜欢
              • 2015-08-20
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多