简体   繁体   English

在RecyclerView中使用自定义字体时出现错误

[英]I am getting an error when i use a custom font in RecyclerView

Its a very basic RecyclerView list app with two TextViews and one ImageView that pulls data using an ArrayList class. 它是一个非常基本的RecyclerView列表应用程序,具有两个TextViews和一个ImageView,可使用ArrayList类提取数据。 It works. 有用。 But I wanted to set a custom font with one of the TextViews. 但是我想使用一种TextViews设置自定义字体。 Where can i put the "Typeface code"? 我可以在哪里放置“字体代码”?

Main Activity 主要活动

    public class MainActivity extends ActionBarActivity {

    private RecyclerView mRecyclerView;
    private RecyclerView.Adapter mAdapter;
    private RecyclerView.LayoutManager mLayoutManager;



    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mRecyclerView = (RecyclerView) findViewById(R.id.my_recycler_view);


        mRecyclerView.setHasFixedSize(true);


        mLayoutManager = new LinearLayoutManager(this);
        mRecyclerView.setLayoutManager(mLayoutManager);





        ArrayList<AllList> list = new ArrayList<AllList>();


        list.add(new AllList("test","description",R.drawable.arrow));

        mAdapter = new MyAdapter(list);
        mRecyclerView.setAdapter(mAdapter);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {

        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {

        int id = item.getItemId();


        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }
}

Adapter class 转接器类别

    public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
    private ArrayList<AllList> list;
    Typeface ef;
    Context c;


    public static class ViewHolder extends RecyclerView.ViewHolder {

        public View View;
        public ViewHolder(View v) {
            super(v);
            View = v;
        }
    }


    public MyAdapter(ArrayList<AllList> duas) {


        this.list = duas;
    }


    @Override
    public MyAdapter.ViewHolder onCreateViewHolder(ViewGroup parent,
                                                   int viewType) {

        View v = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.row, parent, false);



        ViewHolder vh = new ViewHolder(v);

        return vh;
    }


    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {


       TextView title = (TextView) holder.View.findViewById(R.id.title);
       TextView desc = (TextView) holder.View.findViewById(R.id.desc);
        ImageView imageView = (ImageView) holder.View.findViewById(R.id.imageView);


//        Typeface cfont = Typeface.createFromAsset(getContext().getAssets(), "fonts.h.ttf");
//        this.ef = cfont;
//
////        title.setTypeface(ef);

        title.setText(list.get(position).getTitle());
        desc.setText(list.get(position).getDesc());

    }


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

Use this code 使用此代码

public class CustomTextView extends TextView {

public CustomTextView(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
    createFont();
}

public CustomTextView(Context context, AttributeSet attrs) {
    super(context, attrs);
    createFont();
}

public CustomTextView(Context context) {
    super(context);
    createFont();
}

public void createFont() {
    Typeface font = Typeface.createFromAsset(getContext().getAssets(), "roboto_light.ttf");
    setTypeface(font);
}
}

use this class in XML 在XML中使用此类

 <CustomTextView
     android:id="@+id/title" 
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
 />

Last where you have to use this textview just initialized like that and use it 最后,您必须使用刚刚初始化过的textview并使用它

CustomTextView title = (CustomTextView) findViewById(R.id.title);
title.setText("Enjoy!!");

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM