只是玩了一点(我确实知道View.getRootView()),所以我手动迈出了根,甚至超越了。

...
View tv=(View)mv.getParent();
View uv=(View)tv.getParent();
...

其实我以为在某个时候我会遇到NullPointerException,但是我得到了
03-18 13:07:45.554 13568 13568 E AndroidRuntime: java.lang.ClassCastException: android.view.ViewRootImpl cannot be cast to android.view.View

好的,那看起来也很合理。

我还不知道ViewRootImpl,所以我决定选择这个主题并进行一些调查。

但是,当我这样做
ViewRootImpl wv=(View)vv.getParent();

我得到了(当之无愧)
[javac] /home/jagged/Downloads/android/motog/firsttry/src/tk/wellthen/main.java:285: cannot find symbol
[javac] symbol  : class ViewRootImpl
[javac] location: class tk.wellthen.main
[javac]     ViewRootImpl wv=(View)vv.getParent();
[javac]     ^

从编译器中获取,但是当我根据上面的logcat输出完全限定它时,我得到了(几乎)相同的错误消息。 (我什至从logcat输出中将其复制粘贴,以避免输入错误。)

不用说,在尝试import android.view.ViewRootImpl时。出现相同的消息,只是用于另一个源代码行。

此外,即使在整个API文档中只说一个字,Google似乎都没有提及提及它的用处。我认为它主要用于内部,但是如果您问我,那就没有理由了。

在stackoverflow.com上有138个“ViewRootImpl”命中(现在应该至少是139个),但是在这种情况下它们是完全无关的(如果我没有错过任何特别的事情的话)。

我查看了其他一些站点,例如this source code,但是我不知以何种方式将它伪造到SDK中以进行探索是否有用?

有什么建议吗?提前致谢

最佳答案

ViewRootImpl is annotated with @hide 。这从用于开发的 stub android.jar中排除了该类。该类在实际的运行时环境中。

另请参阅:What does @hide mean in the Android source code?

10-01 05:48