重建Android HorizontalScrollView源

重建Android HorizontalScrollView源,android,android-source,horizontalscrollview,Android,Android Source,Horizontalscrollview,我想构建我自己的HorizontalScrollView版本-主要是尝试和调试我遇到的问题,但最终创建HorizontalScrollView的变体 以下是我上传的一个使用API 19的项目: 我基本上复制了HorizontalScrollView.java,并将其复制并重命名为MyHorizontalScrollView(.java)。我已经导入了android.widget.*甚至android.widget.ScrollView,但由于某些原因,Eclipse无法解析简单的ScrollV

我想构建我自己的HorizontalScrollView版本-主要是尝试和调试我遇到的问题,但最终创建HorizontalScrollView的变体

以下是我上传的一个使用API 19的项目:

我基本上复制了HorizontalScrollView.java,并将其复制并重命名为MyHorizontalScrollView(.java)。我已经导入了android.widget.*甚至android.widget.ScrollView,但由于某些原因,Eclipse无法解析简单的ScrollView成员,例如ScrollView.ANIMATED\u SCROLL\u GAP,我可以清楚地看到它是在ScrollView.java中定义的

这只是一个例子——还有许多其他成员无法解决。这是因为MyHorizontalScrollView不属于android.widget包吗

如何创建自己的(我的)水平滚动视图?是手动定义缺少的成员的唯一方法吗?这样做的问题是,最终我将不得不导入android.internal.R(我想),我不知道如何解决这个问题


为什么我还要费心去做我自己的水平滚动视图呢?这都是因为我在自己的一款平板电脑上遇到了问题。我已经在StackOverflow上发布了两个问题,但没有答案。我无法在HorizontalScrollView中覆盖足够多的方法,因此我陷入了困境。

我假设您正在使用Android SDK

这并不是因为你的类不属于android.widget。在android.widget中放置一个类并访问其他android.widget类的包私有成员,这是Java的一部分

您要做的是访问ScrollView的成员,这些成员不是其公共API的一部分。这显然是不受支持的,但嘿,可能会让你做一些方便的黑客。问题是,这些成员不仅不是公共API的一部分,它们甚至不在
android.jar
中(这是您在Eclipse中引用的jar文件,它为SDK提供了定义)

您可以通过分析SDK类上的字节码来验证这一点。运行:

javap -classpath {ANDROID SDK FOLDER}/platforms/android-19/android.jar -private android.widget.ScrollView
你看到的就是你得到的。在ScrollView的源代码中看到这些成员并不意味着它们在SDK中。设备使用完全不同的JAR来实际运行代码

如果你不能通过扩展类来完成你所需要的,那么你正在尝试做一些Android工程师不希望应用程序开发人员做的事情。这意味着,是的,你被当前提议的解决方案困住了。你不能真正导入android.internal.R,因为它是内部的。应用程序无法访问它。您尝试进行的更改只能在框架端进行,而不能在应用端进行。要运行这样的更改,您需要构建一个定制的Android框架。这个框架不存在于任何设备上,对您没有好处

如果它是ScrollView中的一个bug,那么应该提交给Android团队。与此同时,你需要找到一个不同的解决办法

编辑:

至于解决方法,以下解释如何访问Android内部API的博文可能会有帮助,也可能没有帮助:。有点过时。

回答得很好(我会接受)。我确实成功地跳过了scrollTo()方法来实现我想要的。仍然不知道为什么我在4台设备中只有一台设备出现问题,但我变得非常绝望。谢谢你们填补了空白,帮助我理解了源代码,真的很感激。