2010-02-20 74 views
6

我正在寻找一个小部件,它的行为与图库部件类似,但是垂直滚动而不是水平滚动。我搜索了所有内容,显然答案是没有这样的预制小部件存在。Android:垂直画廊?

所以我说我自己,哦,我会看看android源代码中的库类,并修改它来垂直滚动。不那么容易。 android SDK隐藏了很多东西(可以理解为框架维护),但是它也很难扩展小部件。例如,图库类从它的父类AbsSpinner(mSelectedPosition等)中使用了大量的成员变量,以及它的父类的父类等等,从应用程序开发者的角度来看,这些变量根本无法访问。如果不访问这些成员变量,我不能使用库类中的类似代码供我自己使用。

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

有没有更好的方法?为什么android框架使扩展小部件如此困难?

+1

根据您需要的行为,为什么不在一个水平的LinearLayout中使用正常的ListView,而在另一侧使用ImageView呢? – 2010-02-20 17:06:26

回答

12

有没有更好的方法?

由于我们不知道你在建什么,这是不可能的。我同意Yoni Samlan的评论,ListView可能足以满足您的需求。

为什么android框架使 扩展窗口小部件如此困难?

虽然可以想象的是一个重新实现Gallery可能更简单为你让它东方不同,Android核心团队必须权衡这样重新实现对其他发展重点。

其中一个优先事项是SDK保真度。他们希望确保在最大程度上为Android 1.5编写的代码可以在没有修改的情况下在Android 2.1上运行。这通过两种方式来限制它们。首先,他们不能只是改变现有的Gallery,例如,以适应你的愿望,如果这样做会导致他们打破现有的API。其次,核心Android团队不会公开新的方法或类,即使这些方法或类可能对第三方开发人员有益,除非和直到团队准备好长期支持这些方法或类。

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

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

+9

+1,'同理,在理想的世界里,我会有头发...... :-)' – Samuel 2011-05-04 00:55:17