gpt4 book ai didi

android - 如何扩展像 GridView 这样复杂的 Android View ?

转载 作者:行者123 更新时间:2023-11-29 01:53:03 25 4
gpt4 key购买 nike

背景:

我正在寻找一种扩展 GridView 的方法,我需要像在 HTML 中一样实现 col- 和 row-span。我有很多元素,所以我不能使用例如一个 TableLayout。然而,这将过于本地化。到目前为止,我将问题简化为如何扩展 GridView?

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

我的第一个方法是查看我需要替换哪些方法,我发现了一些无法覆盖的私有(private)方法。因此,我尝试将孔源代码从 GridView 复制到一个名为 CustomGrid 的新类中。这是一个可怕的失败,因为我无法访问 com.android.internal.R 类。

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

在找到所有引用后,我尝试扩展类 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 而不会遇到这种情况并且不使用大量反射?我的意思是,将其编写为纯自定义控件似乎是不可能的。

最佳答案

How can I extend the GridView without hiting that limentations and without the usage of massive reflection?

很可能,你不知道。您将代码复制到您的项目中并进行修改以适合,包括所有必需的父类(super class)(直至 ViewGroup)。如果您可以通过 GridView 的一个简单子(monad)类实现您的目标,我将感到震惊。您甚至可能必须从头开始完全编写所需的小部件。

That was a terrible failior due I cannot access the com.android.internal.R class.

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

but unforcantly they are hidden.

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

关于android - 如何扩展像 GridView 这样复杂的 Android View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16789692/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com