Android:无法导入ViewRoot

时间:2012-01-26 16:40:33

标签: android

我正在编写一个应用程序,我想从View对象开始,然后使用View向上走getParent()层次结构,直到我一直到ViewRoot },我希望使用instanceof来检测。

看起来很简单,但我已经遇到麻烦了,因为我似乎无法导入ViewRoot。在我所在的行:

import android.view.ViewRoot;

我明白了:

  

导入android.view.ViewRoot无法解析

我在这个环境中编写过几十个应用程序,在阳光下导入所有内容,但我从未遇到过这样的问题。

Eclipse 3.52,目标是Android 2.2及更高版本。

4 个答案:

答案 0 :(得分:1)

您可以导入此类ViewRoot

答案 1 :(得分:1)

如果您只需要顶级视图,View.getRootView()会为您提供所需内容吗?

答案 2 :(得分:1)

正如@Phillip Fitzsimmons所说,你可能想要这种方法:

View.getRootView()

http://developer.android.com/reference/android/view/View.html#getRootView()

ViewRoot类确实存在,但您无法从android sdk访问它。我不知道为什么。您可以看到其代码here

更新:对评论的回应。你可以像这样穿越父母

Log.d(TAG, "traversing parents of " + currentView);
ViewParent vp = currentView.getParent();
View rootView = currentView.getRootView();
while (vp != null) {
    Log.d(TAG, "Parent: " + vp);
    vp = vp.getParent();
    if (vp.equals(rootView))
        break;
}

答案 3 :(得分:0)

android.view.ViewRoot似乎在某些时候已被弃用。它在(至少)Build 1.0 r1(http://www.androidjavadoc.com/1.0_r1_src/android/view/ViewRoot.html)中似乎仍然存在于Gingerbread中(http://www.androidjavadoc.com/2.3/index.html,请参见android.view包中的ViewRoot链接)。但它确实已经被棒棒糖消失了(可能更早)。 ... 更新:我刚检查了grepcode.com,它显示android.view.ViewRoot首先出现在1.5_r4中,最后出现在2.3.7_r1中。