Android Recyclerview-增加所有内部文本视图的字体大小

时间:2016-09-11 12:06:26

标签: java android android-recyclerview

此代码在我的MainActivity中(工作正常):

mAdapter = new Adapter_RecyclerViewReader(readerLineObjs);
RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(getApplicationContext());
recyclerView.setLayoutManager(mLayoutManager);
recyclerView.setItemAnimator(new DefaultItemAnimator());
recyclerView.setLayoutManager(new LinearLayoutManagerWithSmoothScroller(getBaseContext()));
recyclerView.addItemDecoration(new DividerItemDecoration(this, LinearLayoutManager.VERTICAL));
recyclerView.setAdapter(mAdapter);

和recyclerview适配器:

public class Adapter_RecyclerViewReader extends RecyclerView.Adapter<Adapter_RecyclerViewReader.MyViewHolder> {
    private List<ReaderLineObj> readerLineObjList;
    float minTextSize = 50;
    float maxTextSize = 80;
    Adapter_RecyclerViewReader.MyViewHolder holderGlobal;

    public class MyViewHolder extends RecyclerView.ViewHolder {
        public TextView tvRowHidId, tvRowTitle, tvRowContent;

        public MyViewHolder(View view) {
            super(view);
            tvRowTitle = (TextView) view.findViewById(R.id.tvRowTitle);
            tvRowContent = (TextView) view.findViewById(R.id.tvRowContent);

        }


    }

    public void ResizeTextSize(Boolean makeBigger){


    }

    public Adapter_RecyclerViewReader(List<ReaderLineObj> readerLineObjList) {
        this.readerLineObjList = readerLineObjList;
    }


    @Override
    public Adapter_RecyclerViewReader.MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View itemView = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.row_recycler_list_reader, parent, false);
        return new MyViewHolder(itemView);
    }



    @Override
    public void onBindViewHolder(Adapter_RecyclerViewReader.MyViewHolder holder, int position) {
        ReaderLineObj readerLineObj = readerLineObjList.get(position);

        if (readerLineObj.getTitle().length() >0 ){
            holder.tvRowTitle.setText(Html.fromHtml(readerLineObj.getTitle()));
        }else{
            holder.tvRowTitle.setVisibility(View.GONE);
        }

        holder.tvRowContent.setText(Html.fromHtml(readerLineObj.getContent()));




    }


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

tvRowTitle和tvRowContent的字体大小与btw相同。

我在MainActivity xml中添加了2个按钮,我希望它们具有功能性 获取tvRowTitle的当前字体大小,然后为recyclerview中的所有textview增加/减少它(相对于当前的fontsize)。

preview

显示左侧按钮将在整个网格视图标题&amp;中添加1sp到当前字体大小。内容。

我该怎么做?

1 个答案:

答案 0 :(得分:1)

注意事项: i)您将在Activity类中更改值,但适配器必须实现您对大小所做的更改 ii)您需要使用

重新加载视图
mAdapter.notifyDataSetChanged();

方法

那么工作是什么呢?您可以使用静态浮点值来保持大小,例如,在MainAcitivity中初始化。

static float size_of_items;

然后在增量按钮上将float的值更改为

size_of_items=size_of_items+1;

在减量按钮上做类似的事情。

注意:在适配器类上,对onBindViewHolder方法添加

进行此更改
holder.tvRowTitle.setTextSize(TypeValue.COMPLEX_UNIT_SP, MainActivity.size_of_items);
holder.tvRowContent.setTextSize(TypeValue.COMPLEX_UNIT_SP, MainActivity.size_of_items);

这样你就可以将你的代码放在onBindViewHolder中,如下所示

      if (readerLineObj.getTitle().length() >0 ){
            holder.tvRowTitle.setText(Html.fromHtml(readerLineObj.getTitle()));
        }else{
            holder.tvRowTitle.setVisibility(View.GONE);
        }

        holder.tvRowContent.setText(Html.fromHtml(readerLineObj.getContent()));
holder.tvRowTitle.setTextSize(TypeValue.COMPLEX_UNIT_SP, MainActivity.size_of_items);
    holder.tvRowContent.setTextSize(TypeValue.COMPLEX_UNIT_SP, MainActivity.size_of_items);

最后: 请务必在mAdapter.notifyDataSetChanged();的每次更改后使用size_of_items,以便您拥有这样一个简单的方法:

private void increaseTextSize(){
size_of_items=size_of_items+1;
mAdapter.notifyDataSetChanged();
}

一切顺利,希望答案不会太晚。您不需要我最后创建的方法,而是可以使用setOnClickListener方法上的increase_size按钮内的代码。古德勒克