[英]how do I find complete view hierarchy of android activity in a programmatic way (code)?
我正在編寫一個模塊,以檢測當前正在運行哪個Android活動,以及有關該活動的視圖樹的完整信息。
我了解Android框架的布局,並繪制視圖。 我在哪里可以找到信息,例如屏幕上當前可見的視圖及其位置?
我嘗試使用反射,如下所示。 但是它總是返回空的視圖集。 有沒有人指出如何做到這一點?
try {
String windowManagerClassName;
if (android.os.Build.VERSION.SDK_INT >= 17) {
windowManagerClassName = "android.view.WindowManagerGlobal";
} else {
windowManagerClassName = "android.view.WindowManagerImpl";
}
windowManager = Class.forName(windowManagerClassName);
} catch (ClassNotFoundException e) {
throw new RuntimeException(e);
} catch (SecurityException e) {
throw new RuntimeException(e);
}
Field views;
Field instanceField;
try {
views = windowManager.getDeclaredField("mViews");
instanceField = windowManager.getDeclaredField(getWindowManagerString());
views.setAccessible(true);
instanceField.setAccessible(true);
Object instance = instanceField.get(null);
synchronized (windowManager) {
if (android.os.Build.VERSION.SDK_INT <= 18) {
return new HashSet<View>(Arrays.asList(((View[]) views.get(instance))));
}
}
...
使用architectureviewer來查看視圖層次結構中所有視圖的內容
可以在android sdk中找到工具... / sdk / tools / hierarchyviewer
您也可以在sdk / tools文件夾下嘗試uiautomatorviewer
。
它允許使用鼠標指針瀏覽設備/仿真器上顯示的活動布局。
您可以按照以下相關問題的答案嘗試編寫自定義LayoutInflator:
這是一篇博客文章,其中包含一些有趣的內容-一種自定義布局填充器,可攔截所有視圖膨脹:
可能可以使用該示例代碼來攔截膨脹調用,並接收XML文件的資源ID :
這是一個很長的路要走,但是它使您可以在XML文件膨脹時訪問它們。 直到我看到前一篇帖子促使我進行一些研究之前,我才意識到您可以這樣做。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.