我正在建立一个Android库,假设要遍历应用程序,并打印它的视图层次结构。
显然,我试图尽可能无缝地为开发者构建它。
我对iOS的策略是要求开发人员初始化'我的SDK在启动时运行,并运行一个后台线程,轮询根窗口并在控制器上查找UI元素。
在Android中,我想保持相同的策略,但发现很难访问root Activity,因为Android不允许这种类型的操作。
任何帮助将不胜感激!
答案 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();
}