【问题标题】:Scale all items in a RecyclerView of only TextViews?缩放只有 TextViews 的 RecyclerView 中的所有项目?
【发布时间】:2015-12-05 09:09:24
【问题描述】:

需要将一个RecyclerView的所有TextView的TextSize动态缩放到一个Size。

我尝试一次只缩放一个可见项目,为每个 TextView 提供不同的 FontSize。

itemCount = recyclerView.getLayoutManager().getChildCount();

for (int counter = 0; counter < itemCount; counter++) {
    mTV = (TextView) recyclerView.getLayoutManager().getChildAt(counter);
    mTV.setTextSize(TypedValue.COMPLEX_UNIT_PX, mTV.getTextSize() * detector
            .getScaleFactor());
}

getItemCount() 不能用来代替getChildCount(),我猜!

谢谢!

【问题讨论】:

  • 这个反对票是为了什么?
  • 耻辱投反对票的人!
  • 约翰尼,作为对您的评论的回应,作为纯粹的猜测,反对票可能是由于您的代码格式不正确。请记住,否决票不是对您的性格的人身攻击,它仅意味着一个人认为他们认为您的问题不容易阅读、理解和/或回答。请不要把他们的意见个人化。谢谢!编辑:我刚刚为您改进了代码格式。
  • 美好的一天,@MaximillianLaumeister,所以!

标签: android textview scale android-recyclerview


【解决方案1】:

我的建议是:

1) 在适配器中添加一个文本大小变量(比如mTextSize)。

2) 给这个变量添加setter方法。

public void setTextSize(float size){
   mTextSize = size;
}

3) 在onBindViewHolder() 方法中,您可以根据需要更改文本大小

public void onBindViewHolder(ViewHolder holder, int position) {
    if(holder.textView.getTextSize() != mTextSize && mTextSize != 0.0){
       holder.textView.setTextSize(mTextSize);
    }
}

4) 当你想改变大小时,只需调用:

adapter.setTextSize(newSize);
adapter.notifyDataSetChanged();

PS:

getItemCount()

返回适配器持有的数据集中的项目总数。

getChildCount()

返回组中孩子的数量。

所以getItemCount() 将返回你的整个适配器数据集大小

(getItemCount() >= getChildCount())

【讨论】:

  • ` if(holder.textView.getTextSize() != mTextSize)` in onBindViewHolder() 使 recyclerView 在第一次启动时不可见,但是当您在此空白屏幕上缩放时可见,并在 textSize 上提供所需的缩放。 @拉米。谢谢!
  • @Johnny 不客气!创建适配器时需要使用默认大小初始化 mTextSize 变量。
  • 嗨,但是 TextView 的 TextSize 在 xml 中定义。在这种情况下是 21sp。
  • 感谢@Rami!但是,文档建议:将 notifyDataSetChanged() 作为最后的手段。
猜你喜欢
  • 1970-01-01
  • 2019-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多