只是玩了一点(我确实知道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?