【问题标题】:Measure child in GridLayoutManager在 GridLayoutManager 中测量孩子
【发布时间】:2017-04-24 07:02:41
【问题描述】:

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

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

如果我在RecyclerView.LayoutManager 中覆盖公共measureChild

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

它永远不会被调用。

GridLayoutManager可以测孩子吗?

【问题讨论】:

    标签: android android-recyclerview gridlayoutmanager


    【解决方案1】:

    这两种方法有不同的签名,所以你不应该有任何问题覆盖它们。根据您为子类中的函数指定的参数,将调用相应的超级。

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

    要检查哪些方法在 GridLayoutManager 中调用 measureChild,您可以查看 source

    编辑:似乎从 LinearLayoutManager 派生的 layoutChunk 方法是包私有的,所以在这种情况下,我想唯一的方法是扩展 RecyclerView.LayoutManager 并复制 GridLayoutManager 的整个代码替换 @ 987654327@ 调用与您自己的替换适当地修改代码

    【讨论】:

    • 无法覆盖GridLayoutManagers measureChild,因为它是private 方法:github.com/android/platform_frameworks_support/blob/master/v7/…
    • 也许我应该换个方式写。我的意思是,只要您修改使用measureChild 的方法并将它们替换为您的实现,它就应该可以无缝地工作。在这种情况下,我相信这只是layoutChunk 方法
    • @g4s8 似乎手动实现是去这里的唯一方法。请检查我编辑的答案,但我会建议不要这样做,因为很难针对库的未来更新维护代码
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-14
    相关资源
    最近更新 更多