我有一个片段,膨胀一个XML布局。我的要求是当我的活动恢复时更新我片段内所有视图的文本大小。我试过刷新或强制重绘片段
fragment.getView().invalidate();
哪个似乎没有做的工作。我也试过
fragment.getView().requestLayout();
哪些也没有工作。
在另一个活动,我有一个ListFragment需要做同样的事情。我试图
listfragment.getListView().invalidate();
这的伎俩,刷新我的列表视图,并重新绘制它里面的所有物品。
我不明白为什么一个作品,但不是其他。
我也看到有人建议启动片段交易,并更换一个新的当前片段,它使我想知道
我为什么要创造一个全新的片段取代我当我需要的是刷新我的片段包含的视图上的文本。
片段事务方法将阻止我在我的活动的布局xml中定义我的片段,并且我将不得不以编程方式将片段插入到正确的位置。
有没有简单的方法呢?
更新的已知属性'喜欢的文字大小TextView'不是那种的事你应该需要调用'invalidate()';该框架会在属性更改时为您执行此操作。也许显示你正在更新文本属性的代码;问题更可能出现在那里。您唯一需要手动使视图无效()的方法是创建Android不知道的自定义属性。 – Devunwired 2013-03-07 04:39:55
该片段负责加载其包含的所有视图中的数据,并在填充该数据时检查用户从“首选项”设置的文本大小,并在此时设置该大小。我相信如果尺寸发生显着变化,视图必须调整自己来包装内容,因此需要重新绘制。即使它是一个自定义属性而不是文本大小,我们如何强制片段视图重绘自己? – ps2010 2013-03-07 13:48:39
同样,当你设置文本值时,视图/布局系统知道它需要重新测量和重新绘制。只需看看TextView源代码中的setRawTextSize()行(2406行)......更新属性后会调用什么? https://android.googlesource.com/platform/frameworks/base/+/refs/heads/master/core/java/android/widget/TextView.java另外,'invalidate()'不会强制视图调整自己,'requestLayout()'做到这一点。 – Devunwired 2013-03-07 15:34:31