我正在寻找一个与图库窗口小部件类似的窗口小部件,但是垂直滚动而不是水平滚动。我四处搜索,显然答案是没有这样的预制小部件存在。
所以我说自己,哦,好吧,我会看看android源代码中的gallery类,并修改它来垂直滚动。不那么容易。 android SDK隐藏了很多东西(可以理解为框架维护),但它也使得扩展小部件变得非常困难。例如,gallery类使用了很多来自其父级的成员变量,AbsSpinner(mSelectedPosition,etc等),以及它的父级父级等......从应用程序开发人员的角度来看,它们根本无法访问。如果不能访问这些成员变量,我就无法使用库类中的类似代码供我自己使用。
没有向上移动继承链并将这些父类的源代码全部放在我的项目中,或者从头开始编写小部件而不使用已经解决问题的现有框架小部件,我找不到方法获得一个垂直滚动图库。
有更好的方法吗?为什么android框架使扩展小部件变得如此困难?
答案 0 :(得分:12)
有更好的方法吗?
由于我们不知道你在建造什么,所以不可能这么说。我同意Yoni Samlan的评论,即ListView
可能足以满足您的需求。
为什么android框架会成功 扩展小部件如此困难?
虽然可以想象一个重新实现的Gallery
可能会让你更容易让它以不同的方式定位,但核心的Android团队必须权衡这种重新实现与其他开发优先级。
其中一个优先事项是SDK保真度。他们希望尽可能确保为Android 1.5编写的代码可以在Android 2.1上运行而无需修改。这以两种方式限制了它们。首先,他们不能只改变现有的Gallery
,以满足您的需求,如果这样做会导致他们破坏现有的API。其次,核心Android团队不会公开新的方法或类,即使这些方法或类可能对第三方开发人员有益,除非并且直到团队准备好长期支持这些方法或类。
Android最初是在SDK存在之前编写的。这就是为什么大多数内置应用程序(例如计算器)无法单独使用SDK构建,而是需要构建为固件映像的一部分的原因。同样,核心Android团队必须做出决定,作为创建初始SDK的一部分,如何最好地利用现有代码并创建我们可以使用的公共内容以及我们无法保护的私有内容,并考虑到SDK保真度。您可能已经注意到,Android非常庞大,因此创建SDK必须花费相当多的工作时间。重写大量内容以增加某人可以创建垂直Gallery
的可能性并不大可能在他们的名单上。
在一个理想的世界中,是的,我们可以更容易地扩展内置小部件并显着修改它们的行为。同样,在一个理想的世界里,我会有头发......: - )