2

背景:

我正在寻找一种方法来扩展GridView我需要在 HTML 中实现 col- 和 row-span 的方法。我有数百个元素,所以我不能使用例如TableLayout. 但是,这将过于本地化。到目前为止,我将问题归结为如何扩展 GridView?

我尝试过的和失败的地方:

我的第一种方法是查看我需要替换哪些方法,我发现了一些无法覆盖的私有方法。所以我试图将洞源代码从 复制GridView到一个名为CustomGrid的新类。这是一个可怕的失败,因为我无法访问该com.android.internal.R课程。

然后我放弃了这个想法,看看我是否可以正常扩展类并用自定义副本替换所有私有方法。我拿起一支笔,建了一棵巨大的树,所有的方法都在这里。

在找到所有引用后,我尝试扩展类normal并添加了第一个方法:

private View fillDown(int pos, int nextTop) {
    View selectedView = null;

    int end = (mBottom - mTop);
    if((mGroupFlags & CLIP_TO_PADDING_MASK) == CLIP_TO_PADDING_MASK) {
        end -= mListPadding.bottom;
    }

    // ...

这是我的下一个问题,成员变量mBottommTop未知。我在资源中挖掘了一下,最终在View课堂上找到了它们,但不幸的是它们被隐藏了。

/**
 * The distance in pixels from the top edge of this view's parent
 * to the bottom edge of this view.
 * {@hide}
 */
@ViewDebug.ExportedProperty(category = "layout")
protected int mBottom;

问题:

我怎样才能在GridView不引起哀叹和不使用大量反射的情况下扩展它?我的意思是似乎不可能将其编写为纯自定义控件。

4

1 回答 1

1

我怎样才能扩展 GridView 而不会遇到限制并且不使用大量反射?

很可能,你不知道。您将代码复制到您的项目中并进行修改以适应,包括所有必需的超类(最多ViewGroup)。如果你能通过一个简单的GridView. 您甚至可能必须从头开始完全编写所需的小部件。

这是一个可怕的失败,因为我无法访问 com.android.internal.R 类。

您还需要复制相关资源,然后修复R引用以指向您自己的资源。

但不幸的是,它们被隐藏了。

您可以找到其他获取此数据的方法。mBottom例如,可以更改为getBottom()

于 2013-05-28T10:37:07.740 回答