我正在编写一个应用程序,我想从View
对象开始,然后使用View
向上走getParent()
层次结构,直到我一直到ViewRoot
},我希望使用instanceof
来检测。
看起来很简单,但我已经遇到麻烦了,因为我似乎无法导入ViewRoot
。在我所在的行:
import android.view.ViewRoot;
我明白了:
导入android.view.ViewRoot无法解析
我在这个环境中编写过几十个应用程序,在阳光下导入所有内容,但我从未遇到过这样的问题。
Eclipse 3.52,目标是Android 2.2及更高版本。
答案 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中。