有没有办法获取我的活动中的每个视图?我有超过200个视图,包括按钮和图片,所以我想通过使用循环来访问它们。
例如,像下面这样:
for (View v : this)
{
//do something with the views
//depending on the types (button, image , etc)
}
有没有办法获取我的活动中的每个视图?我有超过200个视图,包括按钮和图片,所以我想通过使用循环来访问它们。
例如,像下面这样:
for (View v : this)
{
//do something with the views
//depending on the types (button, image , etc)
}
有没有一种方法可以获取活动中的每个视图?
获取您的根 View
,将其转换为 ViewGroup
,调用 getChildCount()
和 getChildAt()
,并根据需要递归。
我有超过200个视图,包括按钮和图像,所以我希望能够使用循环访问它们
这是一个相当大的 Views
数量。
具体来说:
private void show_children(View v) {
ViewGroup viewgroup=(ViewGroup)v;
for (int i=0;i<viewgroup.getChildCount();i++) {
View v1=viewgroup.getChildAt(i);
if (v1 instanceof ViewGroup) show_children(v1);
Log.d("APPNAME",v1.toString());
}
}
然后在某个地方使用该函数:
show_children(getWindow().getDecorView());
显示当前 Activity 中的所有视图。
ViewGroup viewgroup=(ViewGroup)view.getParent();
viewgroup.getchildcount();
循环遍历。
我们将获得结果。
用 Kotlin 递归地完成这个任务的好方法:
private fun View.getAllViews(): List<View> {
if (this !is ViewGroup || childCount == 0) return listOf(this)
return children
.toList()
.flatMap { it.getAllViews() }
.plus(this as View)
}
你可以使用HierarchyViewer,它允许你查看包括在代码中创建的视图层次结构。它的主要目的是用于调试此类问题。最新的Android Studio现在在设备监视器中具有此功能,可让您对UI进行转储以进行调试。
hierarchyviewer
工具可以帮助你找到这样的问题。它可以将你的应用程序的视图层次结构以树形图的方式可视化显示,让你检查每个视图的属性。 - adamp