【发布时间】:2011-07-01 00:59:14
【问题描述】:
例如,我希望找到指定活动中具有“气球”标签的所有视图,然后使用 setVisibility 到 GONE 隐藏它们。
有人知道如何检索带有给定标签的视图列表吗?
【问题讨论】:
-
@jamolkhon:不错且干净的解决方案。
标签: android
例如,我希望找到指定活动中具有“气球”标签的所有视图,然后使用 setVisibility 到 GONE 隐藏它们。
有人知道如何检索带有给定标签的视图列表吗?
【问题讨论】:
标签: android
您可以通过这种方式为您的视图设置标签:
someView.setContentDescription("MyTag");
然后为了找到所有带有该标签的视图,您需要调用:
ArrayList<View> outputViews = new ArrayList<>();
rootView.findViewsWithText(outputViews, "MyTag", FIND_VIEWS_WITH_CONTENT_DESCRIPTION);
【讨论】:
ContentDescription 用于可访问性。使用android:tag 或view.setTag() 见上文accepted answer
给你:
private static ArrayList<View> getViewsByTag(ViewGroup root, String tag){
ArrayList<View> views = new ArrayList<View>();
final int childCount = root.getChildCount();
for (int i = 0; i < childCount; i++) {
final View child = root.getChildAt(i);
if (child instanceof ViewGroup) {
views.addAll(getViewsByTag((ViewGroup) child, tag));
}
final Object tagObj = child.getTag();
if (tagObj != null && tagObj.equals(tag)) {
views.add(child);
}
}
return views;
}
我已经在这里回答了:Android - how to find multiple views with common attribute
【讨论】:
for loop 里面写if-else,就像if (child instanceof ViewGroup) views.addAll(getViewsByTag((ViewGroup) child, tag)) else { // check logic on view contain tag. } ==> 要检查ViewGroup 本身是否包含标签?
这个 API 调用 View#findViewWithTag 有帮助吗?请注意,它只返回一个视图...
查找具有给定标签的子视图。如果这个视图有给定的 标记,返回此视图。
【讨论】:
一种方法是从父 ViewGroup 开始,遍历其子视图(及其子视图等),然后检查每个视图组的标签。
【讨论】:
MapView 和覆盖,是吗?我的回答是针对您的问题:Does anyone know how to retrieve a list of views with a given TAG?