如何清除度量缓存android

时间:2016-08-05 17:26:09

标签: android measure

我有一个应用程序在运行时在屏幕上显示控件,它会在视图上调用measure的每个控件,其宽度为WRAP_CONTENT,高度为describe('Controllers Autocomplete', () => { it('should inject the empty suggestions container', () => { let a = 1; let b = 2; expect(a).toNotEqual(b); }); });

在视图上设置任何数据之前执行此操作以显示视图的模板版本,然后在视图上设置实际数据之后。

问题在于,由于它使用相同的输入调用两次测量,第二次我们点击测量缓存并且即使视图的实际测量值已经改变,它也不会重新测量,因为控件上的数据已经改变。

有没有办法强制它在第二次通话时重新测量?

2 个答案:

答案 0 :(得分:0)

我还没有找到清除缓存的方法,但是如果其中一个值是免费的,那么看起来缓存不匹配可能与此类似:

int fakeSpace = (int) (Math.random() * 9999999);
int spec = View.MeasureSpec.makeMeasureSpec(fakeSpace, View.MeasureSpec.UNSPECIFIED);
view.measure(spec, spec);

答案 1 :(得分:0)

您可以使用View.forceLayout来使高速缓存无效,并强制执行完整的布局。
源代码显示了它的作用:

/**
 * Forces this view to be laid out during the next layout pass.
 * This method does not call requestLayout() or forceLayout()
 * on the parent.
 */
public void forceLayout() {
    if (mMeasureCache != null) mMeasureCache.clear();

    mPrivateFlags |= PFLAG_FORCE_LAYOUT;
    mPrivateFlags |= PFLAG_INVALIDATED;
}