Android - 如何让我的第三方库访问通用视图层次结构

时间:2015-11-19 15:39:45

标签: android mobile sdk

我正在建立一个Android库,假设要遍历应用程序,并打印它的视图层次结构。

显然,我试图尽可能无缝地为开发者构建它。

我对iOS的策略是要求开发人员初始化'我的SDK在启动时运行,并运行一个后台线程,轮询根窗口并在控制器上查找UI元素。

在Android中,我想保持相同的策略,但发现很难访问root Activity,因为Android不允许这种类型的操作。

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:0)

Activity,您可以致电getWindow().getDecorView().getRootView()以访问根视图。

以下代码遍历视图树层次结构,并显示所有视图的类名和ID。

   private void traverseViews( Activity activity ) {
      traverseViews( activity.getWindow().getDecorView().getRootView(), 0 );
   }

   private void traverseViews( View view, int indentLevel ) {
      Log.e( "traverse",
         String.format( "%sView: class: %s id: %d",
            repeat( " ", indentLevel ),
            view.getClass().getName(),
            view.getId() ) );

      if ( view instanceof ViewGroup ) {
         ViewGroup viewGroup = (ViewGroup) view;
         for ( int i = 0; i < viewGroup.getChildCount(); i++ ) {
            traverseViews( viewGroup.getChildAt( i ), indentLevel + 1 );
         }
      }
   }

   private String repeat( String string, int n ) {
      StringBuilder builder = new StringBuilder();
      for ( int i = 0; i < n; i++ ) {
         builder.append( string );
      }
      return builder.toString();
   }