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