重建Android Horizo​​ntalScrollView源代码

时间:2014-09-09 04:53:09

标签: android android-source horizontalscrollview

我想构建我自己的Horizo​​ntalScrollView版本 - 主要是尝试调试我遇到的问题但最终创建了Horizo​​ntalScrollView的变种。

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

https://www.mediafire.com/?o0qh7k3ayiz27og

我基本上已经取得了Horizo​​ntalScrollView.java的副本,并将其复制并重命名为MyHorizo​​ntalScrollView(.java)。我已经导入了android.widget。*甚至android.widget.ScrollView但由于某种原因Eclipse不会解析简单的ScrollView成员,例如ScrollView.ANIMATED_SCROLL_GAP,我可以清楚地看到它是在ScrollView.java中定义的。

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

如何创建自己的(My)Horizo​​ntalScrollView?是我自己手动定义缺失成员的唯一方法吗?这样做的问题是,最终我将不得不导入android.internal.R(我认为),我不知道如何解决这个问题。

为什么我甚至不打算尝试制作自己的Horizo​​ntalScrollView?这一切都是因为我在一个特定的平板电脑上遇到了这个课程的问题。我已经在StackOverflow上发布了2个问题,但没有答案有帮助。我无法在Horizo​​ntalScrollView中覆盖足够的方法,因此我的困境。

1 个答案:

答案 0 :(得分:2)

我假设您使用的是Android SDK?

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

您要做的是访问不属于其公共API的ScrollView成员。这显然不受支持,但是嘿,可能会让你做一些方便的黑客攻击。事实上,这些成员不仅不是公共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中的错误,则应将其提交给Android团队。与此同时,你需要找出一个不同的解决方法。

修改

至于解决方法,以下博客文章解释了如何访问Android内部API可能会有所帮助:Using internal (com.android.internal) and hidden (@hide) APIs。这有点过时了。