簡體   English   中英

如何清除度量緩存android

[英]How to clear the measure cache android

我有一個應用程序,它在運行時在屏幕上WRAP_CONTENT控件,它通過視圖上的每個控件調用measure ,並使用提供的寬度和WRAP_CONTENT作為高度。

它在視圖上設置任何數據以顯示視圖的模板版本之前執行此操作,然后在視圖上設置實際數據之后執行此操作。

問題是,由於它使用相同的輸入調用了兩次 measure,第二次我們訪問了 measure 緩存,即使視圖的實際測量值已經更改,因為控件上的數據發生了變化,它也不會重新測量。

有沒有辦法強制它在第二次調用時重新測量?

您可以使用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;
}

我還沒有找到清除緩存的方法,但是如果其中一個值是 UNSPECIFIED,看起來可以像這樣強制緩存不匹配:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM