6

我正在寻找一个行为类似于画廊小部件但垂直滚动而不是水平滚动的小部件。我到处搜索,显然答案是不存在这样的预制小部件。

所以我对自己说,哦,好吧,我会在android源代码中查看gallery类并将其修改为垂直滚动。没那么容易。android SDK 隐藏了很多东西(可以理解为框架维护),但它也使得扩展小部件变得非常困难。例如,gallery 类使用来自其父级 AbsSpinner(mSelectedPosition 等)及其父级的父级等的大量成员变量,从应用程序开发人员的角度来看,这些变量根本无法访问。如果无法访问这些成员变量,我就无法使用来自画廊类的类似代码供我自己使用。

没有向上移动继承链并将这些父类的源代码全部放在我的项目中,或者在不使用已经解决问题的现有框架小部件的情况下从头开始编写小部件,我找不到一种方法来获得垂直滚动画廊。

有没有更好的方法?为什么android框架让扩展widget变得如此困难?

4

1 回答 1

12

有没有更好的方法?

因为我们不知道你在建造什么,所以这是不可能的。我同意 Yoni Samlan 的评论,即 aListView可能足以满足您的需求。

为什么android框架让扩展widget变得如此困难?

虽然可以想象,重新实现Gallery可能会让您更容易使其以不同的方式定向,但核心 Android 团队必须权衡这种重新实现与其他开发优先事项。

其中一项优先事项是 SDK 保真度。他们希望尽可能确保为 Android 1.5 编写的代码无需修改即可在 Android 2.1 上运行。这以两种方式限制了它们。首先,他们不能仅仅改变现有的Gallery,例如,为了满足您的需求,如果这样做会导致他们破坏现有的 API。其次,核心 Android 团队不会公开新的方法或类,即使这些可能对第三方开发人员有益,除非并且直到团队准备好长期支持这些方法或类。

Android 最初是在 SDK 存在之前编写的。这就是为什么大多数内置应用程序(例如计算器)不能单独使用 SDK 构建,而是需要作为固件映像的一部分构建的原因。同样,作为创建初始 SDK 的一部分,核心 Android 团队必须做出决定,即如何最好地利用现有代码并创建我们可以使用的公共内容和我们不能使用的受保护/私有内容,同时牢记 SDK 保真度。您可能已经注意到,Android 非常庞大,因此创建 SDK 肯定会花费大量的员工时间。重写很多内容以增加某人可以创建垂直的可能性Gallery在他们的列表中可能并不高。

在一个理想的世界里,是的,我们将能够更容易地扩展内置小部件并显着修改它们的行为。同样,在一个理想的世界里,我会有头发...... :-)

于 2010-02-20T18:10:08.503 回答