我试图覆盖measureChild中的GridLayoutManager以在测量中使用特定的布局参数。但是GridLayoutManager有自己的measureChild私有实现:

private void measureChild(View view, int otherDirParentSpecMode, boolean alreadyMeasured)


如果我在measureChild中覆盖public RecyclerView.LayoutManager

@Override
public void measureChild(View child, int widthUsed, int heightUsed) {
    super.measureChild(child, widthUsed, heightUsed);
}


它将永远不会被调用。

是否可以在GridLayoutManager中测量儿童?

最佳答案

这两种方法具有不同的签名,因此覆盖它们应该没有任何问题。根据您在子类中为函数指定的参数,将调用适当的super。

但是,您需要修改从GridLayoutManager扩展的子类,以覆盖使用GridLayoutmanager的measureChild实现的所有函数,以便能够使用其他实现。

要检查GridLayoutManager中调用measureChild的方法,可以查看source

编辑:好像从LinearLayoutManager派生的layoutChunk方法是包私有的,因此在这种情况下,我想唯一的方法是扩展RecyclerView.LayoutManager并复制GridLayoutManager的整个代码,用您自己的替换替换measureChild调用来修改代码适当地

07-24 09:24