簡體   English   中英

如何以編程方式(代碼)找到完整的android活動視圖層次結構?

[英]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))));
  }
}
...

對於外部工具,我建議您在Android設備監視器中使用“層次結構視圖”工具。

在此處輸入圖片說明

[編輯]如果您願意以編程方式進行操作。 嘗試獲取根視圖並遞歸遍歷子級。

使用architectureviewer來查看視圖層次結構中所有視圖的內容

可以在android sdk中找到工具... / sdk / tools / hierarchyviewer

您也可以在sdk / tools文件夾下嘗試uiautomatorviewer

它允許使用鼠標指針瀏覽設備/仿真器上顯示的活動布局。

您可以按照以下相關問題的答案嘗試編寫自定義LayoutInflator:


這是一篇博客文章,其中包含一些有趣的內容-一種自定義布局填充器,可攔截所有視圖膨脹:

可能可以使用該示例代碼來攔截膨脹調用,並接收XML文件的資源ID


這是一個很長的路要走,但是它使您可以在XML文件膨脹時訪問它們。 直到我看到前一篇帖子促使我進行一些研究之前,我才意識到您可以這樣做。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM